我在 ElectronJS 应用程序中工作,该应用程序根据客户给出的特定要求生成 QR 码,
- 必须生成和打印以 Base64 格式编码的二维码,最多 500 个字符。
- QR 码字段应以标签长度值(TLV)格式编码,标签值在相邻表的“标签”列中指定。
- TLV 编码应如下:
- 标记:上面提到的标记值存储在一个字节中。
- 对于标签 1 到 5: - 长度:由字段值的 UTF8 编码产生的字节数组的长度。长度应存储在一个字节中。- 值:由字段值的 UTF8 编码产生的字节数组。
- 对于标签 6:
- 长度:散列长度(SHA256)为32字节
- value:构成每个字段值的字节数组
标签如下:
姓名
地址
年龄
薪水
年税百分比
XML工资报告的哈希(我还没有在代码中实现这个)
我开始在 nodeJS 中进行实验,因为在 nodeJS 中使用 Buffer 模块将使字符串转换为十六进制值非常容易。
const { Buffer } = require("buffer");
var name = "John"; // tag 1
var address = "88 times Circlem, new Castle"; // tag 2
var age = "42"; // tag 3
var salary = "8500.00"; // tag 4
var tax = "20"; // tag 5
function toHex(name, address, age, salary, tax) {
tag_name = "1";
tag_s = Buffer.from(tag_name).toString("hex");
length_name = name.length.toString();
length_s = Buffer.from(length_name).toString("hex");
buffer_name = Buffer.from(name).toString("hex");
tag_address = "2";
tag_ta = Buffer.from(tag_address).toString("hex");
length_address = address.length.toString();
length_t = Buffer.from(length_address).toString("hex");
buffer_address = Buffer.from(address).toString("hex");
tag_age = "3";
tag_ti = Buffer.from(tag_age).toString("hex");
length_age = age.length.toString();
length_ti = Buffer.from(length_age).toString("hex");
buffer_age = Buffer.from(age).toString("hex");
tag_salary = "4";
tag_to = Buffer.from(tag_salary).toString("hex");
length_salary = salary.length.toString();
length_s = Buffer.from(length_salary).toString("hex");
buffer_salary = Buffer.from(salary).toString("hex");
tag_tax = "5";
tag_t = Buffer.from(tag_tax).toString("hex");
length_tax = tax.length.toString();
length_v = Buffer.from(length_tax).toString("hex");
buffer_tax = Buffer.from(tax).toString("hex");
allstring =
tag_s +
length_s +
buffer_name +
tag_ta +
length_t +
buffer_address +
tag_ti +
length_ti +
buffer_age +
tag_to +
length_s +
buffer_salary +
tag_t +
length_v +
buffer_tax;
allbase64 = Buffer.from(allstring).toString("base64");
console.log(`
tag_name = ${tag_name}
tag_s = ${tag_s}
length_name = ${length_name}
length_s = ${length_s}
buffer_name = ${buffer_name}
tag_address = ${tag_address}
tag_ta = ${tag_ta}
length_address = ${length_address}
length_t = ${length_t}
buffer_address = ${buffer_address}
tag_age = ${tag_age}
tag_ti = ${tag_ti}
length_age = ${length_age}
length_ti = ${length_ti}
buffer_age = ${buffer_age}
tag_salary = ${tag_salary}
tag_to = ${tag_to}
length_salary = ${length_salary}
length_s = ${length_s}
buffer_salary = ${buffer_salary}
tag_tax = ${tag_tax}
tag_t = ${tag_t}
length_tax = ${length_tax}
length_v = ${length_v}
buffer_tax = ${buffer_tax}
allstring = ${allstring}
allbase64 = ${allbase64}
`);
}
toHex(name, address, age, salary, tax);
这是 TLV 的正确实施......?仅使用 Buffer 模块将字符串打包成十六进制,然后将所有这些部分连接在一起?