Skip to content

Instantly share code, notes, and snippets.

@tvd12
Last active April 28, 2023 00:54
Show Gist options
  • Save tvd12/a03f4d2b8eb92f27229d1bfd659fba28 to your computer and use it in GitHub Desktop.
Save tvd12/a03f4d2b8eb92f27229d1bfd659fba28 to your computer and use it in GitHub Desktop.
qrcode_generator.py
import qrcode
def generate_check_sum(text):
crc = 0xFFFF # initial value
polynomial = 0x1021 # 0001 0000 0010 0001 (0, 5, 12)
bytes_ = text.encode("utf-8")
for b in bytes_:
for i in range(8):
bit = ((b >> (7 - i) & 1) == 1)
c15 = ((crc >> 15 & 1) == 1)
crc <<= 1
if c15 ^ bit:
crc ^= polynomial
return format(crc & 0xFFFF, "x")
bank_code = "vietinbank"
bank_account = "1013772070"
amount = "100000"
message = "Hello"
bank_id_by_code = {"vcb": "970436", "vietinbank": "970415"}
bank_id = bank_id_by_code.get(bank_code)
part12_builder = (
"00" + "{:02d}".format(len(bank_id)) + bank_id + "01" + "{:02d}".format(len(bank_account)) + bank_account
)
part11_builder = (
"0010A000000727"
+ "01"
+ "{:02d}".format(len(part12_builder))
+ part12_builder
+ "0208QRIBFTTA"
)
part1_builder = "38" + "{:02d}".format(len(part11_builder)) + part11_builder
part21_builder = "08" + "{:02d}".format(len(message)) + message
part2 = (
"5303704"
+ "54"
+ "{:02d}".format(len(amount))
+ amount
+ "5802VN"
+ "62"
+ "{:02d}".format(len(part21_builder))
+ part21_builder
)
builder = "000201" + "010212" + part1_builder + part2 + "6304"
qrcode_content = builder + generate_check_sum(builder).upper()
print(qrcode_content)
img = qrcode.make(qrcode_content)
img.save("my_qrcode.png")
@dongnchdg
Copy link

thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment