def luhn_residue(digits): return sum(sum(divmod(int(d)*(1 + i%2), 10)) for i, d in enumerate(digits[::-1])) % 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(15)) 0