问题标签 [check-digit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
605 浏览

algorithm - 找不到数字校验算法

我找不到用于计算我的银行参考的 2 位校验位的算法。

一些例子

由于用户帐户,我知道最后 2 位数字是校验位。

我尝试使用 Mod 97 和 Base 10 (Luhn)

我不知道其他算法,例如: Mod 22、Base 36、Algorithm 45

任何想法?

对我的样本进行分组和计数,如果有帮助的话:

例子: 在此处输入图像描述

Sears 和 Oxxo 的参考有一个校验位,即 Mod10 (Luhn)。

(您可以在此页面计算luhn校验位:https ://planetcalc.com/2464/ )

我如何获得88?

0 投票
2 回答
178 浏览

javascript - 单字符签名方案(最低安全性)

注意:我最初将其发布到Information Security,但我开始认为它在这里可能更相关,因为它实际上是关于确定我应该如何处理请求而不是保护信息。

情况

系统A

我有一个A为用户提供请求的系统。该服务器执行某些操作,然后将用户重定向到 system B。在该重定向期间,服务器A可以为用户提供一个 32 字符的字母数字信息字符串以传递给 system B。需要该信息的 31 个字符,但可以将一个字符用作校验和。这个字符串或多或少可以被认为是一个请求 ID。

系统B

当系统B收到用户的请求时,可以通过解析31个字符的字符串,查询数据库,与系统A对话来验证请求(和类似ID的字符串)是否有效。该系统可以绝对确定地验证请求是有效的并且没有被篡改,但是它在计算上非常昂贵。

攻击者:

该系统很可能会看到许多欺骗 ID 的尝试。这会被后来的检查过滤,所以我不担心单个字符完美地签署了 ID,我确实希望避免在处理这些请求时花费更多的资源而不是需要的资源。

我需要的

我正在寻找一个校验和/签名方案,它可以用一个字符让我很好地了解请求是否应该继续进行验证过程,或者是否应该立即将其丢弃为无效。如果一条消息被丢弃,我需要 100% 确定它是无效的,但如果我保留无效的消息也没关系。我相信一个理想的解决方案意味着保留 1/62 的无效请求(攻击者必须猜测校验字符),但作为一个最小的解决方案,丢弃所有无效请求的一半就足够了。

我试过的

我已经研究过使用 Luhn 算法(与用于信用卡的算法相同),但我希望能够使用密钥来生成字符,以使攻击者更难以欺骗校验和。

作为创建签名方案的第一次尝试,我使用 31 字节密钥对 31 字节 id 进行按位异或运算,将结果字节相加,转换为十进制并将数字相加直到小于 62,然后映射它到集合中的一个字符[a-bA-Z0-9](下面的伪代码)。问题是,虽然我很确定这不会丢弃任何有效请求,但我不确定如何确定这会多久让无效 ID 通过,或者是否可以使用最终值检索密钥。

正式陈述

一个确定性的散列函数,给定一个私钥和一个 31 字节长的输入,在 set 中产生一个输出{x | x ∈ ℕ, x < 62},其中猜测输出比计算私钥更有效。(可变长度输入的奖励积分)

这最终将在 NodeJS/JavaScript 中实现,但并不依赖于语言。


免责声明:如果这个问题过于模糊和理论化,我深表歉意。如果需要,请发表评论以进行澄清。显然,我可以通过多种方式解决这个问题,但在这种情况下,我正在寻找尽可能直接的解决方案。

0 投票
1 回答
3354 浏览

c# - c#中的code 128条码一个条码的校验位错误

我一直在使用此处的代码将三位数字转换为条形码,以便在我工作的公司进行扫描。
我只发现一个条形码有问题。当它编码“002”时,它输出“Ì002 Δ。我发现这不会与空间一起扫描。花费大量时间搜索和寻找该空间中应该包含的内容以及扫描的内容。我发现这里的条形码生成器代码具有  作为校验字符。

现在我的问题是如何更改代码以正确编码?或者,我可以实施另一个免费代码示例来获取代码 128 条码吗?

我已经实现了

提前感谢您的所有帮助!!!!

BarcodeConverter128.cs

0 投票
4 回答
978 浏览

python - 令牌无效。不接受以 0 开头的整数

所以我试图做一个校验位功能,令人尴尬的是,我很早就遇到了一个我一直试图寻找问题的障碍,但不幸的是,我遇到的大多数解释都超出了我的理解。我希望有人能给我一个具体的问题,我现在的问题是什么

很抱歉没有为变量设置名称,我更喜欢以这种方式编码,即使它最终会让其他人难以阅读。无论如何,每次我写一个以 0 开头的整数时,都会出现语法错误“无效令牌”,我不知道如何解决它。有人可以帮我吗?我将感激不尽

固定的。我真的需要更新 Python,我目前正在运行 2.7。

raw_input 解决了这个问题

0 投票
1 回答
152 浏览

algorithm - 基于 Damm 校验位的纠错

如果您使用Damm 算法生成校验位,如果代码未验证,是否有尝试纠正错误的方法?

0 投票
3 回答
102 浏览

r - GTIN-13算法的高效实现

我正在寻找一种有效的方法来实现GTIN-13 校验位算法。我已经查看了一些相关的 SO 帖子,例如thisthis,但在这两种情况下,效率似乎都不是关注的主题。

简而言之,该算法采用一个数字字符串(例如 123765)并将每隔一个数字(从右到左)乘以 1 或 3 来计算总和 (so 5 * 1 + 6 * 3 + 7 * 1 + 3 * 3 + 2 * 1 + 1 * 3 = 44),然后从等于 10 的最接近的倍数中减去该总和或大于此总和(在本例中50 - 44 = 6)以得出最终校验位(此处为 6)。输入的长度预计为 12 位,但如果更短,则可以简单地从左侧用零填充(因此123765实际上预计为000000123765),但结果仍然相同。

一个天真的实现如下:

但是,由于 for 循环以及转换为字符串并返回数字,这是低效的。例如:

在普通桌面上大约需要 6 秒。

计算这个 check.sum 更有效的是什么?

0 投票
3 回答
6834 浏览

python - Python3校验位算法

我正在学习如何专注于编程,并被赋予了以下任务:

ISBN(国际标准书号)由 10 位数字组成。

z 1 z 2 z 3 z 4 z 5 z 6 z 7 z 8 z 9 z 10

最后一位z 10是校验位。它是这样制作的:首先,您使用以下公式创建一种交叉求和:

s = 1 * z 1 + 2 * z 2 + 3 * z 3 + 4 * z 4 + 5 * z 5 + 6 * z 6 + 7 * z 7 + 8 * z 8 + 9 * z 9

校验位 z 10是 s 除以 11 的整数除法的余数。对于余数 10,您写 x 或 X。示例:对于 ISBN 3826604237,您得到校验位 7。

计算:1*3+2*8+3*2+4*6+5*6+6*0+7*4+8*2+9*3 = 150

150 和 11 除的余数是 7。

给出的代码解决方案如下:

我的问题很简单:它是如何工作的?为什么我必须一直计算“number // 10”和“number % 10”?这种算法有名字吗,如果有,怎么称呼?

我将不胜感激任何形式的答案,如果这对您来说似乎是最简单的事情并且您觉得我在浪费您的时间,我很抱歉。到目前为止,我几乎了解了迄今为止学习 python 所学到的任何东西,但是这项任务似乎有点困难(这是我正在研究的这本书的早期章节),我被卡住了,没有得到这不是我的想法。

提前感谢您,祝您有美好的一天!

0 投票
2 回答
225 浏览

python - 如何将两个整数连接成一个字符串(python)?

尝试计算校验位并将其添加到生成的信用卡的末尾。所以我想将两个整数连接成一个字符串。问题是这段代码会生成一个数字列表而不是数字本身。

所以在这里我试图计算我需要添加到校验和中的数字,以便生成符合 Luhn 算法要求的信用卡。我期望得到数字“5”,但我得到了一个包含 5 个元素的列表,例如“123456”。然后它被连接到第一个数字的末尾......这是为什么呢?我想得到例如: 2222222225 而不是 222222222123456

0 投票
1 回答
442 浏览

python - python:创建校验位函数

我正在尝试创建校验位并将它们附加在原始 UPC 之后。这是示例数据

因为有前导 0,所以我必须先将数据作为字符串读取:
import pandas as pd upc = pd.read_csv("/Users/lee/Desktop/upc.csv", dtype = str)

下面是校验位算法的一个例子:
If upc is 003459409000
step (1) 0 + 3*0 + 3 + 3*4 + 5 + 3*9 + 4 + 3*0 + 9 + 3*0 + 0 + 3*0 = 60
step (2) 60 mod 10 = 0
step (3)check digit = 0 (if it's not 0, then check digit = 10 - number in step 2)

根据算法,代码如下:

如果我运行此代码,它会提供正确的校验位并将此结果附加到原始 UPC 的末尾。对于上面的示例,如果我键入:

输出给出 13 位 UPC 0034594090000

现在我的问题是:

  1. 此功能仅适用于单个 upc,即我必须复制/粘贴每个单个 upc 并获取校验位。如何创建适用于数据框中的 UPS 列表的函数?每个结果应返回一个 13 位 UPC,并在原始 UPC 之后附加校验位。

  2. UPC 被读取为字符串。如何将该功能应用于 UPC?我想我应该以某种方式将字符串转换为数字。我对python真的很陌生。

  3. 获得新的 UPC 后,如何将结果保存在 csv 文件中?

非常感谢您的帮助。