javascript - 从 Javascript 中的特定规范生成 QR 码
问题描述
我在 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 模块将字符串打包成十六进制,然后将所有这些部分连接在一起?
解决方案
推荐阅读
- node.js - 如何解析 lambda 中的事件参数?
- python - 在 pandas DataFrame 中的列表上使用 numpy.where(或 numpy.select)
- reactjs - 我的状态被填满又变空了?React-Redux
- java - 在 Java 中将 JSON 参数作为 livy 参数发送
- google-apps-script - 如何在应用脚本中获取当前用户名(邮件 ID)
- java - IntelliJ 不允许我运行我的 Java 代码,将文件上传到 git repo 后 src 文件夹不是蓝色的
- grails - Grails 3.x 不会在 Netbeans 10.0 中激活
- java - 将记录插入 BerkeleyDB 时出现环境故障异常
- azure-devops - 部署组搜索
- dns - 如何访问 Terraform 工作区 (DNS) 之间的资源?