/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠSoftware Ġwith ĠK ao . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . mik ore . pp qr . utility Ċ Ċ const Ġval ĠID _ PAYLOAD _ FORMAT Ġ= Ġ" 0 0 " Ċ const Ġval ĠID _ PO I _ METHOD Ġ= Ġ" 0 1 " Ċ const Ġval ĠID _ MER CHANT _ INFORMATION _ BOT Ġ= Ġ" 2 9 " Ċ const Ġval ĠID _ TRANSACTION _ CUR RE NCY Ġ= Ġ" 5 3 " Ċ const Ġval ĠID _ TRANSACTION _ AMOUNT Ġ= Ġ" 5 4 " Ċ const Ġval ĠID _ COUNTRY _ CODE Ġ= Ġ" 5 8 " Ċ const Ġval ĠID _ CRC Ġ= Ġ" 6 3 " Ċ Ċ const Ġval ĠP AY LOAD _ FORMAT _ EM V _ QR CP S _ MER CHANT _ PRESENT ED _ MODE Ġ= Ġ" 0 1 " Ċ const Ġval ĠPO I _ METHOD _ STATIC Ġ= Ġ" 1 1 " Ċ const Ġval ĠPO I _ METHOD _ DYNAMIC Ġ= Ġ" 1 2 " Ċ const Ġval ĠMER CHANT _ INFORMATION _ TEMPLATE _ ID _ GUID Ġ= Ġ" 0 0 " Ċ const Ġval ĠBOT _ ID _ MER CHANT _ PHONE _ NUMBER Ġ= Ġ" 0 1 " Ċ const Ġval ĠBOT _ ID _ MER CHANT _ T AX _ ID Ġ= Ġ" 0 2 " Ċ const Ġval ĠBOT _ ID _ MER CHANT _ E WAL LET _ ID Ġ= Ġ" 0 3 " Ċ const Ġval ĠGUID _ PRO MP TP AY Ġ= Ġ" A 0 0 0 0 0 0 6 7 7 0 1 0 1 1 1 " Ċ const Ġval ĠTRAN SACTION _ CUR RE NCY _ THB Ġ= Ġ" 7 6 4 " Ċ const Ġval ĠCOUN TRY _ CODE _ TH Ġ= Ġ" TH " Ċ Ċ private Ġval Ġcrc Table Ġ= ĠlistOf ( ĊĠĠĠĠ 0 x 0 0 0 0 , Ġ 0 x 1 0 2 1 , Ġ 0 x 2 0 4 2 , Ġ 0 x 3 0 6 3 , Ġ 0 x 4 0 8 4 , Ġ 0 x 5 0 a 5 , ĊĠĠĠĠ 0 x 6 0 c 6 , Ġ 0 x 7 0 e 7 , Ġ 0 x 8 1 0 8 , Ġ 0 x 9 1 2 9 , Ġ 0 xa 1 4 a , Ġ 0 xb 1 6 b , ĊĠĠĠĠ 0 xc 1 8 c , Ġ 0 xd 1 ad , Ġ 0 xe 1 ce , Ġ 0 xf 1 ef , Ġ 0 x 1 2 3 1 , Ġ 0 x 0 2 1 0 , ĊĠĠĠĠ 0 x 3 2 7 3 , Ġ 0 x 2 2 5 2 , Ġ 0 x 5 2 b 5 , Ġ 0 x 4 2 9 4 , Ġ 0 x 7 2 f 7 , Ġ 0 x 6 2 d 6 , ĊĠĠĠĠ 0 x 9 3 3 9 , Ġ 0 x 8 3 1 8 , Ġ 0 xb 3 7 b , Ġ 0 xa 3 5 a , Ġ 0 xd 3 bd , Ġ 0 xc 3 9 c , ĊĠĠĠĠ 0 xf 3 ff , Ġ 0 xe 3 de , Ġ 0 x 2 4 6 2 , Ġ 0 x 3 4 4 3 , Ġ 0 x 0 4 2 0 , Ġ 0 x 1 4 0 1 , ĊĠĠĠĠ 0 x 6 4 e 6 , Ġ 0 x 7 4 c 7 , Ġ 0 x 4 4 a 4 , Ġ 0 x 5 4 8 5 , Ġ 0 xa 5 6 a , Ġ 0 xb 5 4 b , ĊĠĠĠĠ 0 x 8 5 2 8 , Ġ 0 x 9 5 0 9 , Ġ 0 xe 5 ee , Ġ 0 xf 5 cf , Ġ 0 xc 5 ac , Ġ 0 xd 5 8 d , ĊĠĠĠĠ 0 x 3 6 5 3 , Ġ 0 x 2 6 7 2 , Ġ 0 x 1 6 1 1 , Ġ 0 x 0 6 3 0 , Ġ 0 x 7 6 d 7 , Ġ 0 x 6 6 f 6 , ĊĠĠĠĠ 0 x 5 6 9 5 , Ġ 0 x 4 6 b 4 , Ġ 0 xb 7 5 b , Ġ 0 xa 7 7 a , Ġ 0 x 9 7 1 9 , Ġ 0 x 8 7 3 8 , ĊĠĠĠĠ 0 xf 7 df , Ġ 0 xe 7 fe , Ġ 0 xd 7 9 d , Ġ 0 xc 7 bc , Ġ 0 x 4 8 c 4 , Ġ 0 x 5 8 e 5 , ĊĠĠĠĠ 0 x 6 8 8 6 , Ġ 0 x 7 8 a 7 , Ġ 0 x 0 8 4 0 , Ġ 0 x 1 8 6 1 , Ġ 0 x 2 8 0 2 , Ġ 0 x 3 8 2 3 , ĊĠĠĠĠ 0 xc 9 cc , Ġ 0 xd 9 ed , Ġ 0 xe 9 8 e , Ġ 0 xf 9 af , Ġ 0 x 8 9 4 8 , Ġ 0 x 9 9 6 9 , ĊĠĠĠĠ 0 xa 9 0 a , Ġ 0 xb 9 2 b , Ġ 0 x 5 af 5 , Ġ 0 x 4 ad 4 , Ġ 0 x 7 ab 7 , Ġ 0 x 6 a 9 6 , ĊĠĠĠĠ 0 x 1 a 7 1 , Ġ 0 x 0 a 5 0 , Ġ 0 x 3 a 3 3 , Ġ 0 x 2 a 1 2 , Ġ 0 xdb fd , Ġ 0 xcb dc , ĊĠĠĠĠ 0 xf bbf , Ġ 0 xeb 9 e , Ġ 0 x 9 b 7 9 , Ġ 0 x 8 b 5 8 , Ġ 0 xbb 3 b , Ġ 0 xab 1 a , ĊĠĠĠĠ 0 x 6 ca 6 , Ġ 0 x 7 c 8 7 , Ġ 0 x 4 ce 4 , Ġ 0 x 5 cc 5 , Ġ 0 x 2 c 2 2 , Ġ 0 x 3 c 0 3 , ĊĠĠĠĠ 0 x 0 c 6 0 , Ġ 0 x 1 c 4 1 , Ġ 0 xed ae , Ġ 0 xfd 8 f , Ġ 0 xc dec , Ġ 0 xdd cd , ĊĠĠĠĠ 0 xad 2 a , Ġ 0 xbd 0 b , Ġ 0 x 8 d 6 8 , Ġ 0 x 9 d 4 9 , Ġ 0 x 7 e 9 7 , Ġ 0 x 6 eb 6 , ĊĠĠĠĠ 0 x 5 ed 5 , Ġ 0 x 4 ef 4 , Ġ 0 x 3 e 1 3 , Ġ 0 x 2 e 3 2 , Ġ 0 x 1 e 5 1 , Ġ 0 x 0 e 7 0 , ĊĠĠĠĠ 0 xff 9 f , Ġ 0 xef be , Ġ 0 xdf dd , Ġ 0 xc ffc , Ġ 0 xbf 1 b , Ġ 0 xaf 3 a , ĊĠĠĠĠ 0 x 9 f 5 9 , Ġ 0 x 8 f 7 8 , Ġ 0 x 9 1 8 8 , Ġ 0 x 8 1 a 9 , Ġ 0 xb 1 ca , Ġ 0 xa 1 eb , ĊĠĠĠĠ 0 xd 1 0 c , Ġ 0 xc 1 2 d , Ġ 0 xf 1 4 e , Ġ 0 xe 1 6 f , Ġ 0 x 1 0 8 0 , Ġ 0 x 0 0 a 1 , ĊĠĠĠĠ 0 x 3 0 c 2 , Ġ 0 x 2 0 e 3 , Ġ 0 x 5 0 0 4 , Ġ 0 x 4 0 2 5 , Ġ 0 x 7 0 4 6 , Ġ 0 x 6 0 6 7 , ĊĠĠĠĠ 0 x 8 3 b 9 , Ġ 0 x 9 3 9 8 , Ġ 0 xa 3 fb , Ġ 0 xb 3 da , Ġ 0 xc 3 3 d , Ġ 0 xd 3 1 c , ĊĠĠĠĠ 0 xe 3 7 f , Ġ 0 xf 3 5 e , Ġ 0 x 0 2 b 1 , Ġ 0 x 1 2 9 0 , Ġ 0 x 2 2 f 3 , Ġ 0 x 3 2 d 2 , ĊĠĠĠĠ 0 x 4 2 3 5 , Ġ 0 x 5 2 1 4 , Ġ 0 x 6 2 7 7 , Ġ 0 x 7 2 5 6 , Ġ 0 xb 5 ea , Ġ 0 xa 5 cb , ĊĠĠĠĠ 0 x 9 5 a 8 , Ġ 0 x 8 5 8 9 , Ġ 0 xf 5 6 e , Ġ 0 xe 5 4 f , Ġ 0 xd 5 2 c , Ġ 0 xc 5 0 d , ĊĠĠĠĠ 0 x 3 4 e 2 , Ġ 0 x 2 4 c 3 , Ġ 0 x 1 4 a 0 , Ġ 0 x 0 4 8 1 , Ġ 0 x 7 4 6 6 , Ġ 0 x 6 4 4 7 , ĊĠĠĠĠ 0 x 5 4 2 4 , Ġ 0 x 4 4 0 5 , Ġ 0 xa 7 db , Ġ 0 xb 7 fa , Ġ 0 x 8 7 9 9 , Ġ 0 x 9 7 b 8 , ĊĠĠĠĠ 0 xe 7 5 f , Ġ 0 xf 7 7 e , Ġ 0 xc 7 1 d , Ġ 0 xd 7 3 c , Ġ 0 x 2 6 d 3 , Ġ 0 x 3 6 f 2 , ĊĠĠĠĠ 0 x 0 6 9 1 , Ġ 0 x 1 6 b 0 , Ġ 0 x 6 6 5 7 , Ġ 0 x 7 6 7 6 , Ġ 0 x 4 6 1 5 , Ġ 0 x 5 6 3 4 , ĊĠĠĠĠ 0 xd 9 4 c , Ġ 0 xc 9 6 d , Ġ 0 xf 9 0 e , Ġ 0 xe 9 2 f , Ġ 0 x 9 9 c 8 , Ġ 0 x 8 9 e 9 , ĊĠĠĠĠ 0 xb 9 8 a , Ġ 0 xa 9 ab , Ġ 0 x 5 8 4 4 , Ġ 0 x 4 8 6 5 , Ġ 0 x 7 8 0 6 , Ġ 0 x 6 8 2 7 , ĊĠĠĠĠ 0 x 1 8 c 0 , Ġ 0 x 0 8 e 1 , Ġ 0 x 3 8 8 2 , Ġ 0 x 2 8 a 3 , Ġ 0 xcb 7 d , Ġ 0 xdb 5 c , ĊĠĠĠĠ 0 xeb 3 f , Ġ 0 xfb 1 e , Ġ 0 x 8 bf 9 , Ġ 0 x 9 bd 8 , Ġ 0 xab bb , Ġ 0 xbb 9 a , ĊĠĠĠĠ 0 x 4 a 7 5 , Ġ 0 x 5 a 5 4 , Ġ 0 x 6 a 3 7 , Ġ 0 x 7 a 1 6 , Ġ 0 x 0 af 1 , Ġ 0 x 1 ad 0 , ĊĠĠĠĠ 0 x 2 ab 3 , Ġ 0 x 3 a 9 2 , Ġ 0 xfd 2 e , Ġ 0 xed 0 f , Ġ 0 xdd 6 c , Ġ 0 xcd 4 d , ĊĠĠĠĠ 0 xb daa , Ġ 0 xad 8 b , Ġ 0 x 9 de 8 , Ġ 0 x 8 dc 9 , Ġ 0 x 7 c 2 6 , Ġ 0 x 6 c 0 7 , ĊĠĠĠĠ 0 x 5 c 6 4 , Ġ 0 x 4 c 4 5 , Ġ 0 x 3 ca 2 , Ġ 0 x 2 c 8 3 , Ġ 0 x 1 ce 0 , Ġ 0 x 0 cc 1 , ĊĠĠĠĠ 0 xef 1 f , Ġ 0 xff 3 e , Ġ 0 xcf 5 d , Ġ 0 xdf 7 c , Ġ 0 xaf 9 b , Ġ 0 xbf ba , ĊĠĠĠĠ 0 x 8 fd 9 , Ġ 0 x 9 ff 8 , Ġ 0 x 6 e 1 7 , Ġ 0 x 7 e 3 6 , Ġ 0 x 4 e 5 5 , Ġ 0 x 5 e 7 4 , ĊĠĠĠĠ 0 x 2 e 9 3 , Ġ 0 x 3 eb 2 , Ġ 0 x 0 ed 1 , Ġ 0 x 1 ef 0 Ċ ) Ċ Ċ class ĠPrompt Pay Util Ġ{ ĊĊĠĠĠ Ġfun Ġgenerate QR Data ( target : ĠString , Ġamount : ĠString ? Ġ= Ġnull ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfixed Target Ġ= Ġsanitize Target ( target ) ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Target . length Ġ>= Ġ 1 5 Ġ-> ĠBOT _ ID _ MER CHANT _ E WAL LET _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Target . length Ġ>= Ġ 1 3 Ġ-> ĠBOT _ ID _ MER CHANT _ T AX _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠBOT _ ID _ MER CHANT _ PHONE _ NUMBER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( ID _ PAYLOAD _ FORMAT , ĠP AY LOAD _ FORMAT _ EM V _ QR CP S _ MER CHANT _ PRESENT ED _ MODE ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( ID _ PO I _ METHOD , Ġif Ġ( amount Ġ!= Ġnull ) ĠPO I _ METHOD _ DYNAMIC Ġelse ĠPO I _ METHOD _ STATIC ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ MER CHANT _ INFORMATION _ BOT , Ġserialize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( MER CHANT _ INFORMATION _ TEMPLATE _ ID _ GUID , ĠGUID _ PRO MP TP AY ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( type , Ġtarget Format ( fixed Target )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( ID _ COUNTRY _ CODE , ĠCOUN TRY _ CODE _ TH ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformat ( ID _ TRANSACTION _ CUR RE NCY , ĠTRAN SACTION _ CUR RE NCY _ THB ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( amount Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata . plus ( format ( ID _ TRANSACTION _ AMOUNT , Ġamount Fix ( amount ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġd 2 c Ġ= Ġserialize ( data ) Ġ+ ĠID _ CRC Ġ+ Ġ" 0 4 " ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata . plus ( format ( ID _ CRC , Ġcrc Format ( crc 1 6 ( d 2 c )))) ĊĠĠĠĠĠĠĠ Ġreturn Ġserialize ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat ( id : ĠString , Ġvalue : ĠString ) Ġ= Ġid Ġ+ Ġ(" 0 0 " Ġ+ Ġvalue . length ). take Last ( 2 ) Ġ+ Ġvalue ĊĊĠĠĠ Ġprivate Ġfun Ġserialize ( sa : ĠList < Any >) Ġ= Ġsa . join ToString ( separator Ġ= Ġ"") ĊĊĠĠĠ Ġprivate Ġfun Ġsanitize Target ( id : ĠString ) Ġ= Ġid . replace First ("[ ^ 0 - 9 ] ". to Regex (), Ġ"") ĊĊĠĠĠ Ġprivate Ġfun Ġtarget Format ( id : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( id . length Ġ>= Ġ 1 3 ) Ġsanitize Target ( id ) ĊĠĠĠĠĠĠĠ Ġelse Ġ(" 0 0 0 0 0 0 0 0 0 0 0 0 0 " Ġ+ Ġsanitize Target ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace First (" 0 ". to Regex (), Ġ" 6 6 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take Last ( 1 3 ) ĊĊĠĠĠ Ġprivate Ġfun Ġamount Fix ( amount : ĠString ) Ġ= Ġ"% . 2 f ". format ( amount . toDouble ()) ĊĊĠĠĠ Ġprivate Ġfun Ġcrc Format ( crc : ĠInt ) Ġ= Ġ(" 0 0 0 0 " Ġ+ Ġ"% x ". format ( crc ). toUpperCase ()). take Last ( 4 ) ĊĊĠĠĠ Ġprivate Ġfun Ġcrc 1 6 ( str : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcrc Ġ= Ġ 0 xFFFF ĊĠĠĠĠĠĠĠ Ġstr . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcrc Ġ= Ġcrc Table [ it . toInt () Ġxor Ġ( crc Ġshr Ġ 8 ) Ġand Ġ 0 xFF ] Ġxor Ġ( crc Ġshl Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcrc Ġxor Ġ 0 Ġand Ġ 0 xFFFF ĊĠĠĠ Ġ} Ċ }