excel/wps, 转code128字体宏, 部分字符串出现空格, 导致条码断裂无法扫描的解决方案
原宏是网上抄的, 传播比较广的那个.
后来发现, 部分条码出现空格断裂, 导致PDA无法扫描, 经搜索在一个帖子里, 发现是因为: 宏计算条码时, 会出现校验位刚好是空格的情况, 而空格在code128字体里是不显示的, 所以最后的现象就是条码断裂, 无法扫描
解决思路, 如果校验位为空格, 那么修改起始位或者结束位, 来达到修改校验位的结果
修改之后的宏如下: 其中function encodeToCode128()函数由AI重写完成(原来的该函数已被注释), 经我测试没有发现问题

function toSetC(text) {
return text.match(/\d{2}/g).map((ascii, index) => {
var codeC = Number(ascii);
var charCode = codeC > 94 ? codeC + 100 : codeC + 32;
return String.fromCharCode(charCode)
}).join('');
}
function checkSum128(data, startCode) {
var sum = startCode;
for (var i = 0; i < data.length; i++) {
var code = data.charCodeAt(i);
var value = code > 199 ? code - 100 : code - 32;
sum += (i + 1) * (value);
}
var checksum = (sum % 103) + 32;
if (checksum > 126) checksum = checksum + 68 ;
return String.fromCharCode(checksum);
}
//function encodeToCode128(text, codeABC = "B") {
//text = text.Text ?? text
//var startCode = String.fromCharCode(codeABC.toUpperCase().charCodeAt() + 138);
//var stop = String.fromCharCode(206);
//text = codeABC == 'C' && toSetC(text) || text;
//var check = checkSum128(text, startCode.charCodeAt(0) - 100);
////text = text.replace(" ", String.fromCharCode(194));
//return startCode + text + check + stop;
//}
function encodeToCode128(text, codeABC = "B") {
text = text.Text ?? text;
var originalStartCode = codeABC.toUpperCase().charCodeAt() + 138; // e.g., 'B' → 204
var startCode = originalStartCode;
var stopCode = 206;
var encodedText = codeABC == 'C' ? toSetC(text) : text;
// 计算默认校验位
var check = checkSum128(encodedText, startCode - 100);
var checksum = check.charCodeAt(0);
// 仅在校验位为空格(32)时尝试调整起始符和结束符
if (checksum === 32) {
// 尝试不同的起始符(A/B/C)
var startOptions = [
203, // Start A
204, // Start B
205 // Start C
];
for (var i = 0; i < startOptions.length; i++) {
var newStartCode = startOptions[i];
if (newStartCode === originalStartCode) continue; // 跳过原始起始符(已经计算过)
check = checkSum128(encodedText, newStartCode - 100);
checksum = check.charCodeAt(0);
if (checksum !== 32) {
// 找到非空格校验位,使用新的起始符
startCode = newStartCode;
break;
}
}
// 如果所有起始符都导致空格校验位,尝试修改停止符(206→238)
if (checksum === 32) {
stopCode = 238;
check = checkSum128(encodedText, startCode - 100); // 重新计算校验位
}
}
return String.fromCharCode(startCode) + encodedText + check + String.fromCharCode(stopCode);
}
excel/wps, 转code128字体宏, 部分字符串出现空格, 导致条码断裂无法扫描的解决方案的更多相关文章
- 【错误】jsp查询字符串中空格导致的异常问题!
jsp中查询字符串中空格问题 jsp中查询字符串中参数名的等号右边最好不要出现空格,因为编译器会把他当做是参数值得一部分. 例如: <a href="adjust.jsp?number ...
- 利用Code128字体将文本转换为code128条形码
利用Code128字体将文本转换为code128条形码[转] 最近在做仓储的项目,许多的打印文件都包含条形码,之前一直使用C39P24DhTt字体直接转换为39码,但是最近要求使用code128编 ...
- ios宏定义字符串
ios宏定义字符串 #define objcString(str) @""#str"" 使用效果: objcString(字符串)
- Debian9.5 WPS for Linux字体配置(字体缺失解决办法)
启动WPS for Linux后,出现提示"系统缺失字体" . 出现提示的原因是因为WPS for Linux没有自带windows的字体,只要在Linux系统中加载字体即可. 具 ...
- poi生成excel整理(设置边框/字体/颜色/加粗/居中/)
转: poi生成excel整理(设置边框/字体/颜色/加粗/居中/) 2016年12月02日 11:05:23 吃奶的牛 阅读数:34324 HSSFWorkbook wb = new HSSFW ...
- WPS for Linux 字体配置(字体缺失解决办法)
WPS for Linux 字体配置(字体缺失解决办法) 1. 背景 有些linux装完wps后提示"部分字体无法显示"或"some formula symbols mi ...
- echo -e "\033[字背景颜色;字体颜色m字符串\033[0m
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \033 ...
- 如何在Excel/WPS表格中批量查询顺丰快递信息?
如何在Excel/WPS表格中批量查询顺丰快递信息? 上期我们讲了如何在Excel/WPS表格中批量查询快递信息(还不知道的小伙伴可以看这里:https://zhuanlan.zhihu.com/p/ ...
- 如何在Excel/WPS表格中批量查询快递信息?
如何在Excel/WPS表格中批量查询快递信息? 干电商的小伙伴们还在为如何批量查询快递物流信息发愁吗?别着急,这篇文章或许能够帮助到您. 首先给大家看一下查询的具体成果: 第一步:安装Excel网络 ...
- Java中去除字符串中空格的方法
昨天写了一个关于Excel文件处理的脚本,在字符串匹配功能上总是出现多余不正确的匹配,debug调试之后,发现一个坑. ------->代码中字符串使用了replaceAll()方法,去除了所有 ...
随机推荐
- Vue + Element 实现按钮指定间隔时间点击
1.业务需求 需要加一个按钮,调用第三方API,按钮十分钟之内只能点击一次,刷新页面也只能点击一次 2.思路 加一个本地缓存的时间戳,通过时间戳计算指定时间内不能点击按钮 3.实现 1)vue页面 & ...
- mysql 无数据插入,有数据更新
mysql的语法与sql server有很多不同,sql server执行插入更新时可以update后使用if判断返回的@@rowcount值,然后确定是否插入,mysql在语句中无法使用类似sql ...
- 【C++】开源:ImGui图形用户界面库配置与使用
项目介绍 项目Github地址:https://github.com/ocornut/imgui Dear ImGui (ImGui) 是一个开源的.用 C++ 编写的图形用户界面(GUI)库.它由O ...
- verilator书写C++版模块testbench
默认顶层模型名称为top,环境名称为contextp const std::unique_ptr<VerilatedContext> contextp{new VerilatedConte ...
- Vim编辑windows格式文件出现的[noeol][dos]的含义、解决方法及方法解释
文章目录 前言 [dos] [noeol] 前言 最近想要将保存再windows的文件传到linux上,传进去保存文件之后,用vim打开发现在文件的底下出现了[dos] [noeol]这两个标志.然后 ...
- 数据库自增 ID 用完了会怎么样?
前言 数据库中的自增 ID 用完了该怎么办? 这个问题可以分为有主键 & 无主键两种情况回答. 有主键 如果你的表有主键,并且把主键设置为自增. 在 MySQL 中,一般会把主键设置成 int ...
- SDF矩形(附圆角)公式推导
SDF矩形(附圆角)公式推导 矩形 一般情况下,我们会使用(top_left, top_bottom), (width, height)来定义一个矩形,但是对于SDF而言,使用(centerX, ce ...
- Linux-Deepin下搭建云笔记
背景 操作系统切换为Deepin以后,因为没有windows,各家的云笔记产品,几乎对Linux都没有很好的支持. 印象笔记,没有linux版本,web版本不支持markdown 为知笔记,需要收费, ...
- 泛型(Generics)
Java中的泛型(Generics)是JDK 5引入的一种特性,它使得类.接口和方法能够以一种类型参数化的方式进行定义和使用.泛型的主要目的是增强代码的类型安全性和可读性,同时减少类型转换(cast) ...
- 什么是RESTful 或 GraphQL?
RESTful 与 GraphQL 深度解析 在前端的开发过程中,相信 everyone 对 Get.POST 等请求方式都很熟悉,那么这些请求是归于哪种架构或者设计风格可能又不是很熟.现在在这简单的 ...