在python中生成IMEI

 土豆小妈姐_645 发布于 2023-02-08 16:17

您好我正在尝试在python中创建一个函数来生成有效的IMEI号,所以这是我的函数.IMEI验证使用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号码.我在维基百科上发现了一篇文章,告诉我如何生成校验位(http://en.wikipedia.org/wiki/Luhn_algorithm)

校验位(x)是通过计算数字之和然后计算9次模10的值(在方程式中,(67*9 mod 10))获得的.在算法形式中:1.计算数字之和(67).2.乘以9(603).3.最后一位数字3是校验位.

我错过了什么或维基是错的吗?

1 个回答
  • 请注意,奇数(从最后开始,从0开始)位置的数字加倍,因此您必须将其添加到您的代码中,例如,以下代码将返回luhn校验和:

    def luhn_residue(digits):
        return sum(sum(divmod(int(d)*(1 + i%2), 10))
                     for i, d in enumerate(digits[::-1])) % 10
    

    这里(1 + i%2)乘数等于2奇数位数,并且1对于偶数位置.然后sum(divmod(..., 10))返回(可能)两位数字的数字之和,以及外部和和结果序列.

    您可以使用它来生成有效的数字序列:

    def getImei(N):
        part = ''.join(str(random.randrange(0,9)) for _ in range(N-1))
        res = luhn_residue('{}{}'.format(part, 0))
        return '{}{}'.format(part, -res%10)
    

    演示:

    >>> luhn_residue('79927398713')
    0
    >>> luhn_residue('05671564547361')
    6
    >>> luhn_residue(getImei(14))
    0
    

    2023-02-08 16:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有