Cos*_*sto 25 algorithm checksum error-checking data-consistency
我正在开发一个应用程序,用户必须拨打电话并使用手机键盘输入验证码.
我希望能够检测出他们输入的数字是否正确.电话系统无法访问有效号码列表,而是根据算法(如信用卡号码)验证号码.
以下是一些要求:
鉴于这些要求,您将如何生成这样的数字?
编辑:
@Haaked:代码必须是数字的,因为用户用它的电话键入它.
@matt b:第一步,代码显示在网页上,第二步是调用并输入代码.我不知道用户的电话号码.
Folowup:我发现了几种算法来检查数字的有效性(参见Google代码项目:checkDigits).
Cos*_*sto 29
经过一番研究,我想我会选择ISO 7064 Mod 97,10公式.它似乎非常可靠,因为它用于验证IBAN(国际银行帐号).
公式很简单:
123456
mod(98 - mod(number * 100, 97), 97)
=> 76mod(code, 97) == 1
测试:
mod(12345676, 97) = 1
=>好mod(21345676, 97) = 50
=>坏!mod(12345678, 97) = 10
=>坏! 显然,该算法捕获了大部分错误.
另一个有趣的选择是Verhoeff算法.它只有一个验证数字,并且更难实现(与上面的简单公式相比).