可以用于前端需要用戶輸入銀行卡時做初步校驗
銀行卡號碼的校驗采用Luhn算法,校驗過程大致如下:
從右到左給卡號字符串編號,最右邊第一位是1,最右邊第二位是2,最右邊第三位是3….
從右向左遍歷,對每一位字符t執行第三個步驟,并將每一位的計算結果相加得到一個數s。
對每一位的計算規則:如果這一位是奇數位,則返回t本身,如果是偶數位,則先將t乘以2得到一個數n,如果n是一位數(小于10),直接返回n,否則將n的個位數和十位數相加返回。
因為最終的結果會對10取余來判斷是否能夠整除10,所以又叫做模10算法。
% 取模 - 返回除法的余數
*= 乘法賦值運算符 c = a 等效于 c = c a
// 取整除 - 返回商的整數部分(向下取整)
使用Python實現
def luhn(card_num):
s = 0
card_num_length = len(card_num)
for _ in range(1, card_num_length + 1):
t = int(card_num[card_num_length - _])
print("當前銀行卡對應數字t={}".format(t))
print("當前_為{}".format(_))
print("_取模{}".format(_ % 2))
if _ % 2 == 0:
print("當前是偶數位")
t *= 2
print("t={}".format(t))
s += t if t < 10 else t % 10 + t // 10
else:
print("當前為奇數位")
s += t
print("s={}".format(s))
return s % 10 == 0
if __name__ == '__main__':
print(luhn('6226095711989751'))
執行結果:
當前銀行卡對應數字t=1
當前_為1
_取模1
當前為奇數位
s=1
當前銀行卡對應數字t=5
當前_為2
_取模0
當前是偶數位
t=10
s=2
......
當前銀行卡對應數字t=6
當前_為16
_取模0
當前是偶數位
t=12
s=70
True
參考來源:
https://www.cnblogs.com/cc11001100/p/9357177.html
我們以數字“7992739871”為例,計算其校驗位:
從校驗位開始,從右往左,偶數位乘2(例如,7*2=14),然后將兩位數字的個位與十位相加(例如,10:1+0=1,14:1+4=5);
把得到的數字加在一起(本例中得到67);
將數字的和取模10(本例中得到7),再用10去減(本例中得到3),得到校驗位。
Python實現
def checkLuhn(purportedCC=''):
sum_ = 0
parity = len(purportedCC) % 2
for i, digit in enumerate([int(x) for x in purportedCC]):
if i % 2 == parity:
digit *= 2
if digit > 9:
digit -= 9
sum_ += digit
return sum_ % 10 == 0
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。