44
55module QrcodePixRuby
66 class Payload
7- ID_PAYLOAD_FORMAT_INDICATOR = '00' . freeze
8- ID_POINT_OF_INITIATION_METHOD = '01' . freeze
9- ID_MERCHANT_ACCOUNT_INFORMATION = '26' . freeze
10- ID_MERCHANT_ACCOUNT_INFORMATION_GUI = '00' . freeze
11- ID_MERCHANT_ACCOUNT_INFORMATION_KEY = '01' . freeze
12- ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION = '02' . freeze
13- ID_MERCHANT_CATEGORY_CODE = '52' . freeze
14- ID_TRANSACTION_CURRENCY = '53' . freeze
15- ID_TRANSACTION_AMOUNT = '54' . freeze
16- ID_COUNTRY_CODE = '58' . freeze
17- ID_MERCHANT_NAME = '59' . freeze
18- ID_MERCHANT_CITY = '60' . freeze
19- ID_POSTAL_CODE = '61' . freeze
20- ID_ADDITIONAL_DATA_FIELD_TEMPLATE = '62' . freeze
21- ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID = '05' . freeze
22- ID_CRC16 = '63' . freeze
7+ ID_PAYLOAD_FORMAT_INDICATOR = '00'
8+ ID_POINT_OF_INITIATION_METHOD = '01'
9+ ID_MERCHANT_ACCOUNT_INFORMATION = '26'
10+ ID_MERCHANT_ACCOUNT_INFORMATION_GUI = '00'
11+ ID_MERCHANT_ACCOUNT_INFORMATION_KEY = '01'
12+ ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION = '02'
13+ ID_MERCHANT_CATEGORY_CODE = '52'
14+ ID_TRANSACTION_CURRENCY = '53'
15+ ID_TRANSACTION_AMOUNT = '54'
16+ ID_COUNTRY_CODE = '58'
17+ ID_MERCHANT_NAME = '59'
18+ ID_MERCHANT_CITY = '60'
19+ ID_POSTAL_CODE = '61'
20+ ID_ADDITIONAL_DATA_FIELD_TEMPLATE = '62'
21+ ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID = '05'
22+ ID_CRC16 = '63'
2323
2424 attr_accessor :pix_key ,
2525 :repeatable ,
@@ -33,7 +33,7 @@ class Payload
3333 :amount
3434
3535 def payload
36- p = ''
36+ p = ''
3737
3838 p += emv ( ID_PAYLOAD_FORMAT_INDICATOR , '01' )
3939 p += emv_repeatable
@@ -51,7 +51,17 @@ def payload
5151 end
5252
5353 def base64
54- ::RQRCode ::QRCode . new ( payload ) . as_png ( bit_depth : 1 , border_modules : 0 , color_mode : 0 , color : 'black' , file : nil , fill : 'white' , module_px_size : 6 , resize_exactly_to : false , resize_gte_to : false ) . to_data_url
54+ ::RQRCode ::QRCode . new ( payload ) . as_png (
55+ bit_depth : 1 ,
56+ border_modules : 0 ,
57+ color_mode : 0 ,
58+ color : 'black' ,
59+ file : nil ,
60+ fill : 'white' ,
61+ module_px_size : 6 ,
62+ resize_exactly_to : false ,
63+ resize_gte_to : false
64+ ) . to_data_url
5565 end
5666
5767 private
@@ -66,41 +76,34 @@ def emv_repeatable
6676 end
6777
6878 def emv_merchant
69- merchant_gui = emv ID_MERCHANT_ACCOUNT_INFORMATION_GUI , 'BR.GOV.BCB.PIX'
70- merchant_pix_key = emv ID_MERCHANT_ACCOUNT_INFORMATION_KEY , pix_key
79+ merchant_gui = emv ( ID_MERCHANT_ACCOUNT_INFORMATION_GUI , 'BR.GOV.BCB.PIX' )
80+ merchant_pix_key = emv ( ID_MERCHANT_ACCOUNT_INFORMATION_KEY , pix_key )
7181 merchant_description = emv ( ID_MERCHANT_ACCOUNT_INFORMATION_DESCRIPTION , description ) if description
72-
73- emv ID_MERCHANT_ACCOUNT_INFORMATION , "#{ merchant_gui } #{ merchant_pix_key } #{ merchant_description } "
82+ emv ( ID_MERCHANT_ACCOUNT_INFORMATION , "#{ merchant_gui } #{ merchant_pix_key } #{ merchant_description } " )
7483 end
7584
7685 def emv_additional_data
7786 txid = emv ( ID_ADDITIONAL_DATA_FIELD_TEMPLATE_TXID , transaction_id || '***' )
78- emv ID_ADDITIONAL_DATA_FIELD_TEMPLATE , txid
87+ emv ( ID_ADDITIONAL_DATA_FIELD_TEMPLATE , txid )
7988 end
8089
81- def crc16 ( t )
82- extended_payload = "#{ t } #{ ID_CRC16 } 04"
90+ def crc16 ( text )
91+ extended_payload = "#{ text } #{ ID_CRC16 } 04"
8392 extended_payload_length = extended_payload . length
8493 polynomial = 0x1021
8594 result = 0xFFFF
8695
87- if extended_payload_length > 0
96+ if extended_payload_length . positive?
8897 offset = 0
8998
9099 while offset < extended_payload_length
91- result = result ^ ( extended_payload [ offset ] . bytes [ 0 ] << 8 )
92-
100+ result ^= extended_payload [ offset ] . bytes [ 0 ] << 8
93101 bitwise = 0
94102
95103 while bitwise < 8
96- result = result << 1
97-
98- if result & 0x10000 != 0
99- result = result ^ polynomial
100- end
101-
102- result = result & 0xFFFF
103-
104+ result <<= 1
105+ result ^= polynomial if result & 0x10000 != 0
106+ result &= 0xFFFF
104107 bitwise += 1
105108 end
106109
0 commit comments