Skip to content

Instantly share code, notes, and snippets.

@kenzouno1
Created July 14, 2024 11:36
Show Gist options
  • Save kenzouno1/0b6c29dea0ccf59f4893e5117ed4e9cd to your computer and use it in GitHub Desktop.
Save kenzouno1/0b6c29dea0ccf59f4893e5117ed4e9cd to your computer and use it in GitHub Desktop.
const generateCheckSum = (text) => {
let crc = 0xffff;
let polynomial = 0x1021;
let bytes = new TextEncoder().encode(text);
for (let b of bytes) {
for (let i = 0; i < 8; i++) {
let bit = ((b >> (7 - i)) & 1) === 1;
let c15 = ((crc >> 15) & 1) === 1;
crc <<= 1;
if (c15 !== bit) {
crc ^= polynomial;
}
}
}
return (crc & 0xffff).toString(16);
};
// All params must be a string
const generateQRCode = (bankId, amount, bankAccount, message) => {
const part12Builder = ""
.concat("00")
.concat(bankId.length.toString().padStart(2, "0"))
.concat(bankId)
.concat("01")
.concat(bankAccount.length.toString().padStart(2, "0"))
.concat(bankAccount);
const part11Builder = ""
.concat("0010A000000727")
.concat("01")
.concat(part12Builder.length.toString().padStart(2, "0"))
.concat(part12Builder)
.concat("0208QRIBFTTA");
const part1Builder = ""
.concat("38")
.concat(part11Builder.length.toString().padStart(2, "0"))
.concat(part11Builder);
const part21Builder = ""
.concat("08")
.concat(message.length.toString().padStart(2, "0"))
.concat(message);
const part2 = ""
.concat("5303704")
.concat("54")
.concat(amount.length.toString().padStart(2, "0"))
.concat(amount)
.concat("5802VN")
.concat("62")
.concat(part21Builder.length.toString().padStart(2, "0"))
.concat(part21Builder);
const builder = ""
.concat()
.concat("000201")
.concat("010212")
.concat(part1Builder)
.concat(part2)
.concat("6304");
const qrcodeContent = builder.concat(generateCheckSum(builder).toUpperCase());
return qrcodeContent;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment