package Ġcom . t ams ire e . rx kit . de mod ata . bank Ċ Ċ import Ġcom . t ams ire e . rx kit . de mod ata . base . Generic Generator Ċ import Ġcom . t ams ire e . rx kit . de mod ata . kit . Lu hn Utils Ċ import Ġorg . apache . commons . lang 3 . StringUtils . left Pad Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ< pre > Ċ Ġ* ĠçĶŁæĪĲ éļıæľº éĵ¶ è¡Į åį¡ åı· ï¼ļ Ċ Ġ* Ċ Ġ* Ġ åıĤèĢĥ ï¼ļ æķĪ éªĮ æĺ¯åĲ¦ ä¸º éĵ¶ è¡Į åį¡ ï¼Į çĶ¨äºİ éªĮè¯ģ ï¼ļ Ċ Ġ* Ġ çİ° è¡Į Ġ 1 6 Ġ ä½į éĵ¶ èģĶ åį¡ çİ° è¡Į åį¡ åı· å¼Ģ å¤´ Ġ 6 Ġ ä½į æĺ¯ Ġ 6 2 2 1 2 6 ï½ŀ 6 2 2 9 2 5 Ġ ä¹ĭéĹ´çļĦ ï¼Į 7 Ġ åĪ° Ġ 1 5 Ġ ä½į æĺ¯ éĵ¶ è¡Į èĩªå®ļä¹ī çļĦ ï¼Į Ċ Ġ* Ġ åı¯èĥ½ æĺ¯ åıĳ åį¡ åĪĨ è¡Į ï¼Į åıĳ åį¡ ç½ĳ çĤ¹ ï¼Į åıĳ åį¡ åºı åı· ï¼Į ç¬¬ Ġ 1 6 Ġ ä½į æĺ¯ æł¡éªĮ çłģ ãĢĤ Ċ Ġ* Ġ 1 6 Ġ ä½į åį¡ åı· æł¡éªĮ ä½į éĩĩçĶ¨ ĠLu hm Ġ æł¡éªĮ æĸ¹æ³ķ è®¡ç®Ĺ ï¼ļ Ċ Ġ* Ġ 1 ï¼Į å°Ĩ æľª å¸¦ æł¡éªĮ ä½į çļĦ Ġ 1 5 Ġ ä½į åį¡ åı· ä»İ åı³ ä¾Ŀ æ¬¡ ç¼ĸåı· Ġ 1 Ġ åĪ° Ġ 1 5 ï¼Į ä½į äºİ å¥ĩ æķ° ä½į åı· ä¸ĬçļĦ æķ°åŃĹ ä¹ ĺ ä»¥ Ġ 2 Ċ Ġ* Ġ 2 ï¼Į å°Ĩ å¥ĩ ä½į ä¹ ĺ ç§¯ çļĦ ä¸ª åįģ ä½į åħ¨éĥ¨ çĽ¸ åĬł ï¼Į åĨį åĬł ä¸Ĭ æīĢæľī åģ ¶ æķ° ä½į ä¸ĬçļĦ æķ°åŃĹ Ċ Ġ* Ġ 3 ï¼Į å°Ĩ åĬł æ³ķ åĴĮ åĬł ä¸Ĭ æł¡éªĮ ä½į èĥ½ è¢« Ġ 1 0 Ġ æķ´ éĻ¤ ãĢĤ Ċ </ pre > Ġ* Ċ Ġ*/ Ċ class ĠBank Card Number Generator Ġprivate Ġconstructor () Ġ: ĠGeneric Generator () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġgenerate (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= Ġrandom Instance ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ ĠCont iguous Set < Integer > Ġsets Ġ= ĠCont iguous Set Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Range . closed ( 6 2 2 1 2 6 , Ġ 6 2 2 9 2 5 ), ĠDis crete Domain . inte gers ()); Ċ // ĠĠĠĠĠĠĠ ĠImmutableList < Integer > Ġlist Ġ= Ġsets . asList (); ĊĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġ 6 2 2 1 2 6 Ġ+ Ġrandom . nextInt ( 9 2 5 Ġ+ Ġ 1 Ġ- Ġ 1 2 6 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate By Prefix ( prev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠGeneric Generator Ġ= ĠBank Card Number Generator () ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠĠĠĠĠ Ġ* Ġæł¹æį® ç»Ļ å®ļ åīį åħŃ ä½į çĶŁæĪĲ åį¡ åı· ĊĠĠĠĠĠĠĠ Ġ</ pre > Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġgenerate By Prefix ( prefix : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom ( System . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb ard No Ġ= Ġprefix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () Ġ+ Ġleft Pad ( random . nextInt ( 9 9 9 9 9 9 9 9 9 ). toString () Ġ+ Ġ"", Ġ 9 , Ġ" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġch s Ġ= Ġb ard No . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}. toCharArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlu hn Sum Ġ= ĠLu hn Utils . get Lu hn Sum ( chs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Code Ġ= Ġif Ġ( lu hn Sum Ġ% Ġ 1 0 Ġ== Ġ 0 ) Ġ' 0 ' Ġelse Ġ( 1 0 Ġ- Ġlu hn Sum Ġ% Ġ 1 0 Ġ+ Ġ' 0 '. toInt ()). to Char () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġb ard No Ġ+ Ġcheck Code ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæł¹æį® éĵ¶ è¡Į åĲįç§° Ġ åıĬ éĵ¶ è¡Į åį¡ ç±»åŀĭ çĶŁæĪĲ å¯¹åºĶ åį¡ åı· ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġbank Name Ġ éĵ¶ è¡Į åĲįç§° ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcard Type Ġ éĵ¶ è¡Į åį¡ ç±»åŀĭ ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ éĵ¶ è¡Į åį¡ åı· ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġgenerate ( bank Name : ĠBank Name Enum , Ġcard Type : ĠBank Card TypeEnum ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcandidate Prefixes : ĠArray < Int >? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( card Type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Prefixes Ġ= Ġbank Name . all Card Prefixes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( card Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBank Card TypeEnum . DE BIT Ġ-> Ġcandidate Prefixes Ġ= Ġbank Name . debit Card Prefixes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBank Card TypeEnum . CRED IT Ġ-> Ġcandidate Prefixes Ġ= Ġbank Name . credit Card Prefixes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( candidate Prefixes Ġ== Ġnull Ġ|| Ġcandidate Prefixes . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" æ²¡æľī è¯¥ éĵ¶ è¡Į çļĦ çĽ¸åħ³ åį¡ åı· ä¿¡æģ¯ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġcandidate Prefixes [ Random (). nextInt ( candidate Prefixes . size )] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġgenerate By Prefix ( prefix ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }