Files
2026-09-24 16:25:22 +08:00

71 lines
2.7 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
class code128b {
// 输入数据
data = ""
// Code 128 模式表:索引0..106 -> 二进制模块串(1=黑,0=白),来自业界通用表
// 参考:StartB=104 -> 11010010000, Stop=106 -> 1100011101011
private static PATTERNS = [
"11011001100","11001101100","11001100110","10010011000","10010001100","10001001100",
"10011001000","10011000100","10001100100","11001001000","11001000100","11000100100",
"10110011100","10011011100","10011001110","10111001100","10011101100","10011100110",
"11001110010","11001011100","11001001110","11011100100","11001110100","11101101110",
"11101001100","11100101100","11100100110","11101100100","11100110100","11100110010",
"11011011000","11011000110","11000110110","10100011000","10001011000","10001000110",
"10110001000","10001101000","10001100010","11010001000","11000101000","11000100010",
"10110111000","10110001110","10001101110","10111011000","10111000110","10001110110",
"11101110110","11010001110","11000101110","11011101000","11011100010","11011101110",
"11101011000","11101000110","11100010110","11101101000","11101100010","11100011010",
"11101111010","11001000010","11110001010","10100110000","10100001100","10010110000",
"10010000110","10000101100","10000100110","10110010000","10110000100","10011010000",
"10011000010","10000110100","10000110010","11000010010","11001010000","11110111010",
"11000010100","10001111010","10100111100","10010111100","10010011110","10111100100",
"10011110100","10011110010","11110100100","11110010100","11110010010","11011011110",
"11011110110","11110110110","10101111000","10100011110","10001011110","10111101000",
"10111100010","11110101000","11110100010","10111011110","10111101110","11101011110",
"11110101110","11010000100","11010010000","11010011100","1100011101011"
]
// Code Set B: 字符到值(0..95 => ASCII 32..127
private mapCharToValueB(ch:string):number {
const code = ch.charCodeAt(0)!;
if (code < 32 || code > 127) {
return -1
}
return code - 32
}
constructor(text:string) {
this.data = text
}
encode():string {
if (this.data.length == 0) return ""
const values = [] as number[]
for (let i = 0; i < this.data.length; i++) {
values.push(this.mapCharToValueB(this.data.charAt(i)))
}
// 起始码 CodeB=104
const startVal = 104
let checksum = startVal
for (let i = 0; i < values.length; i++) {
checksum += values[i] * (i + 1)
}
checksum = checksum % 103
// 组合:StartB + 数据 + 校验 + Stop
const bits = [] as string[]
bits.push(code128b.PATTERNS[startVal])
for (let i = 0; i < values.length; i++) {
bits.push(code128b.PATTERNS[values[i]])
}
bits.push(code128b.PATTERNS[checksum])
// Stop=106
bits.push(code128b.PATTERNS[106])
return bits.join("")
}
}
export { code128b };