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()方法,去除了所有 ...
随机推荐
- HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍 🔐
title: HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍 date: 2025/2/28 updated: 2025/2/28 author: cmdragon ...
- .NET 10 首个预览版发布,跨平台开发与性能全面提升
前言 2024年2月25日,微软正式推出 .NET 10 预览版 1,标志着这一跨平台开发框架迈入新里程碑. 本次更新聚焦 JIT 编译器优化.运行时性能提升和跨平台开发体验增强,同时引入多项开发者期 ...
- manim边学边做--场景Scene简介
在 Manim 社区版本中,Scene(场景)是构建动画的核心概念之一,它为我们提供了一个结构化的方式来组织和呈现动画内容. 本文将介绍什么是Scene,它在Manim动画中的作用,以及不同类型的Sc ...
- CTF-CRYPTO-ECC(1)
CTF-CRYPTO-ECC(1) 椭圆加密 1.简介 椭圆曲线密码学(Elliptic curve cryptography),简称 ECC,和RSA.ElGamel 算法等类似,是一种公开秘钥加密 ...
- mac ssh 密钥登陆远程服务器
第一步 创建ssh文件目录 打开终端 执行: mkdir ~/.ssh 第二步 将密钥对移到ssh目录下 mv ~/Downloads/MyKeyPair.pem ~/.ssh/MyKeyPair.p ...
- go 遍历修改切片数据
package main import "fmt" type good struct { id int64 sum int64 } func main() { good1 := g ...
- 编写你的第一个 Django 应用程序,第4部分
本教程从教程 3 停止的地方开始.我们是 继续民意调查应用程序,并将专注于表单处理和 减少我们的代码. 一.编写最小表单 让我们更新上一个教程的投票详细信息模板("polls/detail. ...
- 深入理解Base64编码原理
前言 上篇文章有涉及到Base64编码的内容,今天我们再来详细了解一下Base64的编码原理以及应用场景. 通过这篇文章你能够学习到: 什么是Base64,为什么需要Base64? Base64的编码 ...
- HTTP 和 RPC
TCP 是传输层的协议,而基于 TCP 造出来的 HTTP 和各类 RPC 协议,它们都只是定义了不同消息格式的应用层协议而已. RPC(Remote Procedure Call),又叫做远程过程调 ...
- 1000: 【编程入门】熟悉一下Online Judge的环境
1000: [编程入门]熟悉一下Online Judge的环境 题目描述 请不要笑.用来适应环境的题目,自然比较简单些. 计算2个整数的和.这两个整数都在1到100之间. 输入 输入只有一行,包括2个 ...