条形码(Code 128)字体有问题无法扫描

2024-03-23

很容易生成一个3 of 9 http://www.squaregear.net/fonts/free3of9.shtml条形码使用Font()

Font f = new Font("Free 3 of 9", 80);
this.Font = f;

Label l = new Label();
l.Text = "*STACKOVERFLOW*";
l.Size = new System.Drawing.Size(800, 600);
this.Controls.Add(l);

this.Size = new Size(800, 600);

它的工作。我看到条形码并且能够扫描它。现在我想用别的东西,比如Code 128 http://en.wikipedia.org/wiki/Code_128为此,我需要安装字体(完成)并进行更改

Font f = new Font("Free 3 of 9", 80); to Font f = new Font("Code 128", 80);

之后我在窗户上看到一个条形码。问题是我无法扫描它。我认为那是因为我没有使用正确的start and stop条形码的标签。据我了解,必须始终有一个开始/停止字符或其他字符。对于 9 中的 3 来说,代码 128 的 * 是我不确定的。维基上有起始码A所以我尝试了

Font f = new Font("<Start Code A>test<Stop>", 80);, Font f = new Font("<Start Code A>test<Stop Code A>", 80);等等...我无法扫描输出。因为扫描仪找不到起始符和终止符。有任何想法吗?谢谢


代码 128 可以用完全正常的字体来表示。不过,它比 9 中的 3 更棘手,因为您必须在末尾包含一个校验和字符,该字符需要根据条形码的内容动态计算。还有 3 个不同的版本,每个版本都有不同的起始字符。

换句话说,条形码需要如下布局:

[start char][barcode][checksum][stop char]

code128的好处是比3 of 9简洁很多。

这一页 http://en.wikipedia.org/wiki/Code_128帮助我制定了计算校验和的算法。

该算法的一般概述是:

  1. 条形码的每个字符都会分配一个特定的值 取决于角色是什么以及它在角色中的位置 条码。

  2. 将上述 1) 中的所有值相加。

  3. 获取上面 2) 中总计的模 103 值。

  4. 在大多数情况下,校验和字符将是以下内容的 ASCII 代码:(模值 加上上面 3) 中确定的 32)。

有一些细微差别,我最终需要用 javascript 创建这个算法(毫无疑问)。为了我自己将来的参考并展示一些细微差别,它看起来像这样:

/*
 * This is the variable part of my barcode, I append this to a 
 * static prefix later, but I need to perform logic to compute the 
 * checksum for this variable. There is logic earlier that enforces 
 * this variable as a 9 character string containing only digits.   
 */ 
var formIncrement = // a 9 char "digit" string variable

/*
 * Dynamically compute the total checksum value (before modulus) 
 * for the variable part of my barcode, I will need to get a modulus 
 * from this total when I am done. If you need a variable number of 
 * characters in your barcodes or if they are not all digits 
 * obviously something different would have to be done here.  
 */ 
var incrementCS = ((parseInt(formIncrement.charAt(0)) + 16) * 7) +
                  ((parseInt(formIncrement.charAt(1)) + 16) * 8) +
                  ((parseInt(formIncrement.charAt(2)) + 16) * 9) +
                  ((parseInt(formIncrement.charAt(3)) + 16) * 10) +
                  ((parseInt(formIncrement.charAt(4)) + 16) * 11) +
                  ((parseInt(formIncrement.charAt(5)) + 16) * 12) +
                  ((parseInt(formIncrement.charAt(6)) + 16) * 13) +
                  ((parseInt(formIncrement.charAt(7)) + 16) * 14) + 
                  ((parseInt(formIncrement.charAt(8)) + 16) * 15);

/*
 * 452 is the total checksum for my barcodes static prefix (600001), 
 * so it doesn't need to be computed dynamically, I just add it to 
 * the variable checksum total determined above and then get the 
 * modulus of that sum:  
 */ 
var checksum = (452 + incrementCS) % 103


var barcode = "š600001" + formIncrement

/*
 * The 0 and the 95 - 102 cases had to be defined explicitly because 
 * their checksum figures do not line up with the javascript char 
 * codes for some reason (see the code 128 definition table in the 
 * linked page) otherwise we simply need to get the charCode of the 
 * checksum + 32. I also tack on the stop char here. 
 */ 
switch (checksum) {
    case 0 :
    barcode += "€œ";
    break;
    case 95 :
    barcode += "‘œ";
    break;
    case 96 :
    barcode += "’œ";
    break;
    case 97 :
    barcode += "“œ";
    break;
    case 98 :
    barcode += "”œ";
    break;
    case 99 :
    barcode += "•œ";
    break;
    case 100 :
    barcode += "–œ";
    break;
    case 101 :
    barcode += "—œ";
    break;
    case 102 :
    barcode += "˜œ";
    break;
    default :
    barcode += String.fromCharCode(checksum + 32) + "œ";
}

return barcode;

您可能会注意到,示例中的开始字符和停止字符 (š、œ) 似乎与链接页面上显示的字符不匹配。如果我记得的话,我认为这是因为我有一些非标准的 code128 字体,这些字符被转换为正确的字符。

EDIT

我检查了我的文档。看起来我的字体是从就在这儿 http://freebarcodefonts.dobsonsw.com/code128font-download.html。专门使用该字体并使用上面的算法,我刚刚制作了一个 code128b 条形码test结果是štestwœ,扫描得很好。你的校验和算法似乎工作正常,因为我们都有w但如果您收到以下信息,则您的开始和停止代码似乎已关闭:ÌtestwÎ.

我特意寻找与我正在使用的相同的条形码字体,因为我有一种感觉,不同品牌的 code128 字体可能会实现不同的字符来表示开始和结束条形码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

条形码(Code 128)字体有问题无法扫描 的相关文章

随机推荐

  • 使用 OrbitControls 时锁定 x 轴旋转 - Three.js

    使用 OrbitControls 时锁定 x 轴旋转是否可行 目前我有一个挂在绳子上的圣诞星的对象模型 我希望它仅水平旋转 对于您的 OrbitControls 实例集 controls minPolarAngle Math PI 2 co
  • Twitter Bootstrap Datepicker 不会更新输入值

    我有这段代码 但现在我陷入困境
  • Unicode 联盟是否打算让 UTF-16 字符耗尽?

    当前版本的 UTF 16 只能编码 1 112 064 个不同的数字 码点 0x0 0x10FFFF Unicode 联盟是否打算让 UTF 16 字符耗尽 即创建一个代码点 gt 0x10FFFF 如果不是 为什么有人要编写 utf 8
  • Go中for循环中的多个变量

    我正在尝试在 Go 中编写一个带有多个变量的 for 循环 来自 javascript 世界 我想实现这样的目标 var i 10 var b 2 for var a b i i 2 b b some code 我尝试过这样的 原始翻译 i
  • laravel 5 在运行时更改数据库名称

    有没有办法更改连接的数据库名称而不是添加另一个连接 如果我在 Config database connections 中添加 3 或 5 个数据库是可以的 但是如果我正在使用 100 个或更多数据库怎么办 由于所有人都使用相同的主机 用户名
  • 什么属于聚合根

    这是一个实用的领域驱动设计问题 从概念上讲 我认为我得到了聚合根 直到我去定义一个聚合根 我有一个 Employee 实体 它已作为聚合根出现 在商业领域 some员工可以记录与工作相关的违规行为 员工 违规行为 由于并非所有员工都受到此限
  • 将数据表从一个数据集复制到另一个数据集

    我正在尝试将位于不同数据集 Y 内部的数据表添加到新的数据集 X 如果直接添加的话 会出现以下错误 DataTable 已属于另一个 DataSet 我是否必须克隆 DataTable 并将所有行导入其中 然后将新的 DataTable 添
  • 动画径向渐变CSS3:从左到右移动? [复制]

    这个问题在这里已经有答案了 我想要一个带有径向渐变的动画背景radial gradient circle rgba 255 255 255 0 8 0 rgba 255 255 255 0 100 将其从左向右移动 http jsfiddl
  • Magento 多个 Authorize.net 网关

    我见过这个关于货币类型的问题 但我要问的是如何在同一商店为不同的信用卡类型配置第二个 Authorize net 帐户 因此 我们希望一些信用卡使用第一个主 Authorize net 网关 而其他信用卡使用辅助 Authorize net
  • Background.js 找不到使用内容脚本注入的内容

    我的 Chrome 扩展有一个内容脚本 可以将自定义 DIV 注入当前页面 这部分有效 但是 该扩展还有一个右键单击上下文菜单 单击该菜单时 应该以某种方式修改此注入的 DIV 比方说 向该 DIV 添加一些文本 问题是找不到注入的内容 右
  • 尝试在Python中导入docx

    公平警告 我对 python 非常陌生 所以请原谅我犯的任何愚蠢错误 我希望能够使用 Python 在 Mac 上打开 关闭 操作 读取 Word 文档 docx 文件 python docx 模块看起来非常有用 所以我一直尝试将其安装在我
  • 如何在组织模式下取消选中下一个循环/重复任务的复选框

    对于组织模式下的循环或重复任务 在该任务内 如果有多个复选框且全部标记为勾选 则在一般任务屏蔽为 完成 后 下一个循环周期的复选框仍显示为勾选 并且应该取消勾选 例如 TODO Cyclic monthly home 0 5 SCHEDUL
  • Node.js - 部署 Node.js 应用程序时是否需要在生产服务器上重新安装所有模块

    我已经开发了我的第一个 Node js pp 目前 它只是放在我的笔记本电脑上 在开发过程中我必须安装一些模块 npm install socket io npm install email protected cdn cgi l emai
  • Angular 1 项目的 TSLint 配置

    我的团队正在使用 Angular 1 5 typescript 进行项目 有人可以给我关于像我这样的项目的最佳 TSLint 配置的建议吗 我现在想添加 TSLint 配置 https github com Microsoft TypeSc
  • 如何在数据坐标中的绘图之外编写注释

    我的图形来自y 1 to y 10 我想在任意位置写一小段文字 比如x 2000 y 5 ax annotate MgII xy 2000 0 5 0 xycoords data 现在我想要相同的 但这次文本必须位于图形之外 但位于我在数据
  • 聊天框,自动滚动到底部

    如何让聊天框自动滚动 HTML
  • IndexedDB - 什么是 Key、keyPath 和 indexName?

    我来自MySQL 习惯了传统的数据库表方案 我无法理解 IndexedDB 及其一些术语 我在文档中查找了这些定义 Key一种数据值 通过它在对象存储中组织和检索存储的值 索引名称要创建的索引的名称 keyPath要使用的索引的键路径 基本
  • 使用构建器和 MapStruct 将 null 值映射到默认值

    我想映射字段Source to Target类 如果源值为null 我想根据数据类型将其转换为默认值 表示字符串 0表示数字类型等 为了设置值 我没有使用常规设置器 而是使用构建器 带有protobuf https developers g
  • HTML 5 页面转换

    我想在页面之间进行漂亮 现代的过渡 我找到了这个教程 http www onextrapixel com 2010 02 23 how to use jquery to make slick page transitions http ww
  • 条形码(Code 128)字体有问题无法扫描

    很容易生成一个3 of 9 http www squaregear net fonts free3of9 shtml条形码使用Font Font f new Font Free 3 of 9 80 this Font f Label l n