擅长:python、mysql、java
<p>请注意,奇数(从末尾开始,从0开始)位置的数字是双倍的,因此您必须将其添加到代码中,例如,以下代码将返回luhn校验和:</p>
<pre><code>def luhn_residue(digits):
return sum(sum(divmod(int(d)*(1 + i%2), 10))
for i, d in enumerate(digits[::-1])) % 10
</code></pre>
<p>这里<code>(1 + i%2)</code>乘数等于<code>2</code>表示奇数,而{<cd3>}表示偶数位置。然后<code>sum(divmod(..., 10))</code>返回一个(可能)两位数字的位数和,并返回结果序列的外部和和。在</p>
<p>您可以使用它来生成有效的编号规则:</p>
^{pr2}$
<p>演示:</p>
<pre><code>>>> luhn_residue('79927398713')
0
>>> luhn_residue('05671564547361')
6
>>> luhn_residue(getImei(14))
0
</code></pre>