C# 用C语言创建Code128条码
愚蠢的我,我想,只要写一些带有条形码字体的文本,就会让扫描仪读出来。看来我错了 因此,在阅读了一些关于code128条形码的文档后,我了解到: 条形码以103、104或105开头,具体取决于类型 然后是绳子本身 然后是字符串中每个字符的计算总和乘以其位置的模103 然后附加106 我的代码是:C# 用C语言创建Code128条码,c#,asp.net-core,barcode,code128,C#,Asp.net Core,Barcode,Code128,愚蠢的我,我想,只要写一些带有条形码字体的文本,就会让扫描仪读出来。看来我错了 因此,在阅读了一些关于code128条形码的文档后,我了解到: 条形码以103、104或105开头,具体取决于类型 然后是绳子本身 然后是字符串中每个字符的计算总和乘以其位置的模103 然后附加106 我的代码是: public string Str = "MADS"; public string Barcode = null; public void OnGet() { int start = 104;
public string Str = "MADS";
public string Barcode = null;
public void OnGet()
{
int start = 104;
int end = 106;
int calc = start;
Barcode = start.ToString();
for (var i = 0; i < Str.Length; i++)
{
calc += (Convert.ToChar(Str[i]) - 32) * (i + 1);
Barcode += Str[i];
}
double rem = calc % 103;
Barcode += Convert.ToChar((int)rem + 32).ToString() + end;
Console.WriteLine(Barcode);
}
我不确定条形码字符串中要包含多少内容,以便扫描仪读取它:
MADS,
104MADS,
104MADS,106
还是我完全弄错了
我的推荐信是:
特别是链接1,因为我已经用扫描仪测试了这个结果,它是有效的。
遗憾的是,我不能让我的输出看起来像那样
结论
在阅读了评论和答案后,我认为对我来说最好的方法是使用现有的图书馆
我选择NetBarcode是因为它与.Net Core兼容。检查此库:
关于Nuget:
它将生成一个包含条形码的图像,条形码作为输入中的文本读取。
用法示例:
BarcodeLib.Barcode b = new BarcodeLib.Barcode();
Image img = b.Encode(BarcodeLib.TYPE.CODE128, "038000356216", Color.Black, Color.White, 290, 120);
检查此库:
关于Nuget:
它将生成一个包含条形码的图像,条形码作为输入中的文本读取。
用法示例:
BarcodeLib.Barcode b = new BarcodeLib.Barcode();
Image img = b.Encode(BarcodeLib.TYPE.CODE128, "038000356216", Color.Black, Color.White, 290, 120);
如果您使用的是条形码字体,则需要在发送到输出的字符串中包含起始字符、数据字符串、校验和和停止字符,以便示例中的最后一个字符是正确的。字体仅查找每个符号,并为您绘制条形图和空格。它对条形码符号和规则本身一无所知 var buttonGen=document.getElementByIdbtnGen; buttonGen.onclick=函数{ var x=document.getElementByIdtextIn.value; 变量i,j,intWeight,intLength,intWtProd=0,arrayData=[],fs; var arraySubst=[Ã,Ä,Æ,È,Ê]; /* *代码128 B的校验和计算 */ intLength=x.length; arrayData[0]=104;//假设代码为128B,将进行修改以支持A、C和切换。 intWtProd=104; 对于j=0;j
如果您使用的是条形码字体,则需要在发送到输出的字符串中包含起始字符、数据字符串、校验和和停止字符,以便示例中的最后一个字符是正确的。字体仅查找每个符号,并为您绘制条形图和空格。它对条形码符号和规则本身一无所知 var buttonGen=document.getElementByIdbtnGen; buttonGen.onclick=函数{ var x=document.getElementByIdtextIn.value; 变量i、j、整数、整数 h、 intWtProd=0,arrayData=[],fs; var arraySubst=[Ã,Ä,Æ,È,Ê]; /* *代码128 B的校验和计算 */ intLength=x.length; arrayData[0]=104;//假设代码128B,将修改为支持A、C和切换。 intWtProd=104; 对于j=0;j
无论如何,谷歌很容易找到这样的库。你能在你的答案中提供除此之外的任何价值吗?用代码128条形码生成的基本用法示例更新了答案。谷歌很容易找到这样的库。你能在回答中提供除此之外的任何值吗?用代码128条形码生成的基本用法示例更新了答案。我编写了一个代码128编码算法,它输出一个黑白条的布尔数组-你缺少编码表。每个字符编码为一组11块白/黑,代表黑/白条的相对厚度。Code128还有一些额外的注意事项,例如切换集。共有3个集合,A/B/C可以更有效地编码不同的字符。集合C用于编码成对的数字,因此,如果条形码包含大量数字,则可以大幅缩短条形码长度。您也不需要文字字符串104等-您可以选择第一个字节为103、104、,105分别表示集合A/B/C的开始。应在编码表中查找该字节,以确定构成编码的条的宽度。例如,char 103=StartA表示使用小写ascii字符集的条形码的开始。这被编码为11010000100,这意味着一个2宽的粗行,后面是一个1宽的间隙,然后是一个1宽的粗行,依此类推。另外,假设您仍然希望自己这样做,而不使用外部库/服务,您可以在输出中使用RLE压缩来保持文件小,而不需要任何外部LIB。您只需在写入条形码数据时使用RLE编码将位图写入磁盘即可。输出一个厚度为1的位图将很难扫描,按乘法因子放大效果很好,但文件大小会很快变大,所以压缩。这都是假设您仍然不能使用其他方法,例如web服务或库。@Charleh感谢您的输入。在阅读了您的评论后,我相信对我来说最好的方法是使用现有的库。没有问题,仅供参考,因为它是用于基于云的ERP系统,并且不允许您与任何编程语言进行互操作。我本可以使用Azure函数,但我喜欢ch
allenge,实现起来很有趣——另外,我想要一个版本,在条形码非常关键的情况下,它并没有任何外部依赖,并且总是100%工作,而不需要外部服务100%可用。我已经编写了一个Code128编码算法,输出一个白/黑条的布尔数组——你们找不到了编码表。每个字符编码为一组11块白/黑,代表黑/白条的相对厚度。Code128还有一些额外的注意事项,例如切换集。共有3个集合,A/B/C可以更有效地编码不同的字符。集合C用于编码成对的数字,因此,如果条形码包含大量数字,则可以大幅缩短条形码长度。您也不需要文字字符串104等-您可以选择第一个字节为103、104、,105分别表示集合A/B/C的开始。应在编码表中查找该字节,以确定构成编码的条的宽度。例如,char 103=StartA表示使用小写ascii字符集的条形码的开始。这被编码为11010000100,这意味着一个2宽的粗行,后面是一个1宽的间隙,然后是一个1宽的粗行,依此类推。另外,假设您仍然希望自己这样做,而不使用外部库/服务,您可以在输出中使用RLE压缩来保持文件小,而不需要任何外部LIB。您只需在写入条形码数据时使用RLE编码将位图写入磁盘即可。输出一个厚度为1的位图将很难扫描,按乘法因子放大效果很好,但文件大小会很快变大,所以压缩。这都是假设您仍然不能使用其他方法,例如web服务或库。@Charleh感谢您的输入。在阅读了您的评论后,我相信对我来说最好的方法是使用现有的库。没有问题,仅供参考,因为它是用于基于云的ERP系统,并且不允许您与任何编程语言进行互操作。我本可以使用Azure功能,但我喜欢挑战,而且实现起来很有趣——另外,我想要一个版本,在条形码非常关键的情况下,它没有任何外部依赖性,并且总是100%工作,而不需要外部服务100%可用。谢谢你,Brian。虽然我最终使用了一个现有的库,但这是原始问题的答案,因此这将是正确的答案。如果每个问题的答案都是使用X库,那么堆栈溢出就不需要存在。由于法律和技术原因,成千上万的程序员无法使用库。谢谢你的支持,谢谢你,布莱恩。虽然我最终使用了一个现有的库,但这是原始问题的答案,因此这将是正确的答案。如果每个问题的答案都是使用X库,那么堆栈溢出就不需要存在。由于法律和技术原因,成千上万的程序员无法使用库。谢谢你的支持。