我想要自动生成一个独特的8-10字符ID字符串,其中包含某种校验和位,以防止在数据输入时出现错误。我更喜欢没有序号的东西,在这种情况下,输入数据的人最终会陷入“常规”状态,并且习惯于一直输入相同的序列。
是否有任何与这类事情相关的最佳实践/陷阱?
更新: OK,我想我需要提供更多细节。
第二次更新 OK,我不明白这是什么让人困惑的,但我将尝试进一步解释。我试图创建跟踪号码,将在表格上,将填写和数据-在稍后的时间输入。我将生成id并将其打在表单上;id必须是唯一的,它需要支持大量的数字,并且需要对数据输入进行合理的白痴验证。
我不知道这件事是否已经做过,也不知道是否能做到,但问一问也没什么坏处。
发布于 2012-02-02 20:03:30
你的问题很笼统--因此只是一些一般性的方面:
更新-根据注释:
要检查输入的值,只需从除最后一个数字之外的所有数字重新计算CRC-6-ITU,并将结果与最后一个数字进行比较。
以上是相当“不可猜测的”,但绝对不是“高度安全”。
更新2-根据评论:
有关如何在javascript中计算CRC的一些启示,请参见这 -它包含CRC-8的javascript代码,等等。
您应该能够根据CRC-6-ITU多项式来修改此代码.
发布于 2012-02-02 20:05:02
您可能会模仿航空公司的预订系统:它们使用as和0-9作为字符,将一个数字转换为基-36。因此,它们的上限是36^6。
如果您需要保证唯一性,并且不希望它们是连续的,则必须将已使用的随机数保存在某个表中。
在您有了随机或伪随机ID之后,只需计算您的校验位数。
使用CRC算法。它们可以适应任何需要的长度(在您的情况下,6位)。
编辑
如果不清楚:即使使用alpha代码,在生成校验数字之前,也必须将其转换为数字。
编辑
发布于 2012-02-02 20:02:26
大多数信用卡使用Luhn算法 (也称为mod10算法)校验和算法来验证卡号。维基百科:
Luhn算法将检测任何一位数字的错误,以及几乎所有相邻数字的转换。然而,它不会检测到两位数序列09到90的转位(反之亦然)。
该算法是通用的,可以应用于任何识别号码。
https://stackoverflow.com/questions/9119070
复制相似问题