你好,我正在尝试在python中创建一个函数来生成有效的IMEI数字,所以这里是我的功能。TheIMEI验证使用Luhn算法,所以我尝试在脚本中实现它。在
def getImei():
num = ''
suma = 0
for i in range(0,13):
digit = random.randrange(0,9)
suma = suma + digit
num = num + str(digit)
suma = suma * 9
digit = suma % 10
num = num + str(digit)
return num
但是函数无法生成有效的IMEI编号。我在wikipedia上找到一篇文章,告诉我如何生成校验位(http://en.wikipedia.org/wiki/Luhn_algorithm)
校验位(x)是通过计算位数之和,然后计算9倍的模10得到的(在等式形式,(67*9模10))。 算法形式: 1.计算数字之和(67)。 2.乘以9(603)。 最后一个数字3是校验位。在
是我遗漏了什么还是维基有问题?在
你跳过了这一步,如果结果大于10,每隔两位数取两位数之和。来自Wikipedia:
@alko的解决方案并不适用于所有的IMEI号码:请参见有效IMEI号码的this list(或实际上相同的cc号码)。在
以下是有效的解决方案:
请注意,奇数(从末尾开始,从0开始)位置的数字是双倍的,因此您必须将其添加到代码中,例如,以下代码将返回luhn校验和:
这里}表示偶数位置。然后
(1 + i%2)
乘数等于2
表示奇数,而{sum(divmod(..., 10))
返回一个(可能)两位数字的位数和,并返回结果序列的外部和和。在您可以使用它来生成有效的编号规则:
^{pr2}$演示:
相关问题 更多 >
编程相关推荐