演算法系列4《Luhn》

2021-06-29 15:33:02 字數 642 閱讀 1706

luhn演算法由ibm的hans peter luhn發明,又稱為「模10」演算法,是一種簡單的校驗和演算法,用來驗證識別號,一般會被用於身份證號碼,信用卡號、imei號、社會保險號的驗證。它的演算法簡單,並只採用最後一位數字作為校驗位,可以有效防止偶然的輸入性錯誤。

luhn演算法只能用於簡單的校驗,不能用於加密演算法。luhn演算法可以檢測到以下輸入性錯誤:所有的單位數字錯誤,如 210寫作215;能檢測到絕大多數的臨位錯位,比如315寫作351,但是只有兩位的情況下無法檢測,比如09寫作90;能夠檢測雙數字寫錯10種的7 種,比如11寫為22,但是有3種無法檢測,如22和55、33和66、44和77。 如果對校驗有更高的要求,可以考慮功能更強大,但也更複雜的verhoeff演算法。

luhn演算法的計算步驟:

1)  從卡號最後一位數字開始,偶數字乘以2,如果乘以2的結果是兩位數,將兩個位上數字相加儲存。

例如:卡號:6 23 12 0000 00 00 00 00 11,(

1+1+2

)*2=8

2)  將卡號中餘下的數字和上面結果中的數字直接相加。

6+3+2+1+8=20

3)  如果信用卡號碼是合法的,總和可以被10整除。

文/閆鑫原創 

演算法系列4《Luhn》

luhn演算法由ibm的hans peter luhn發明,又稱為 模10 演算法,是一種簡單的校驗和演算法,用來驗證識別號,一般會被用於身份證號碼,信用卡號 imei號 社會保險號的驗證。它的演算法簡單,並只採用最後一位數字作為校驗位,可以有效防止偶然的輸入性錯誤。luhn演算法只能用於簡單的校驗...

java演算法系列

棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...

演算法系列 Move Zeroes

given an array nums,write a function to move all 0 s to the end of it while maintaining the relative order of the non zero elements.for example,given ...