Content deleted Content added
No edit summary |
|||
(36 intermediate revisions by 31 users not shown) | |||
Line 1:
{{Short description|Simple checksum formula}}
{{redirects|Luhn|people named Luhn|Luhn (surname)}}
The '''Luhn algorithm''' or '''Luhn formula''' (creator: [[IBM]] scientist [[Hans Peter Luhn]]), also known as the "[[modular arithmetic|modulus]] 10" or "mod 10" [[algorithm]], is a simple [[check digit]] formula used to validate a variety of identification numbers. {{efn|It is described in
The algorithm is in the [[public ___domain]] and is in wide use today. It is specified in [[ISO/IEC 7812-1]].<ref>{{cite tech report
==Description==
The check digit is computed as follows:
#
#
# Sum all the
# The check digit is calculated by <math>(10 - (s \bmod 10)) \bmod 10</math>, where s is the sum from step 3. This is the smallest number (possibly zero) that must be added to <math>s</math> to make a multiple of 10. Other valid formulas giving the same value are <math>9 - ((s + 9)\bmod 10)</math>, <math>(10 - s)\bmod 10</math>, and <math>10\lceil s/10\rceil - s</math>. Note that the formula <math>(10 - s)\bmod 10</math> will not work in all environments due to differences in how negative numbers are handled by the [[modulo]] operation.
Line 16:
Assume an example of an account number 1789372997 (just the "payload", check digit not yet included):
{| class="wikitable" style="text-align:center;border:none
| style="width:1.5em" | 7
| style="width:1.5em" | 9
Line 54:
|-
!
| style="background: #FFA; color: #000;" | '''14'''
| 9
| style="background: #FFA; color: #000;" | '''18'''
| 2
| style="background: #FFA; color: #000;" | '''14'''
| 3
| style="background: #FFA; color: #000;" | '''18'''
| 8
| style="background: #FFA; color: #000;" | '''14'''
| 1
|-
! Sum digits
|'''5''' <br> (1+4)
|9 <br>
|'''9''' <br> (1+8)
|2 <br>
|'''5''' <br> (1+4)
|3 <br>
|'''9''' <br> (1+8)
|8 <br>
|'''5''' <br> (1+4)
|1 <br>
|}
The sum of the resulting digits is 56.
The check digit is equal to <math>(10 - (56 \
This makes the full account number read 17893729974.
Line 97:
Because the algorithm operates on the digits in a right-to-left manner and zero digits affect the result only if they cause shift in position, zero-padding the beginning of a string of numbers does not affect the calculation. Therefore, systems that pad to a specific number of digits (by converting 1234 to 0001234 for instance) can perform Luhn validation before or after the padding and achieve the same result.
The algorithm appeared in a United States Patent<ref name="
== Pseudocode implementation ==
Line 106:
sum := 0
parity := length mod 2
'''for''' i from 1 to (length - 1) '''do'''
'''if''' i mod 2
sum := sum + cardNumber[i]
'''elseif''' cardNumber[i] > 4 '''then'''
Line 115:
'''end if'''
'''end for'''
'''return''' cardNumber[length] == ((10 - (sum mod 10)) mod 10)
'''end function'''
== Uses ==
Line 219 ⟶ 122:
* [[Payment card number|Credit card numbers]]
* [[International Mobile Equipment Identity|IMEI numbers]]
* [[CUSIP]] numbers for North American financial instruments
* [[National Provider Identifier|National Provider Identifier numbers]] in the United States
* [[Canada|Canadian]] [[social insurance number]]s
Line 224 ⟶ 128:
* [[South Africa|South African]] ID numbers
* [[South Africa|South African]] Tax reference numbers
* [[Personal identity number (Sweden)| Swedish
* [[Sweden|Swedish]] Corporate Identity Numbers (OrgNr)
* [[Greece|Greek]] Social Security Numbers (ΑΜΚΑ)
Line 230 ⟶ 134:
* [[European Patent Convention|European patent]] application numbers
* Survey codes appearing on [[:File:McDonalds Receipt Luhn Algorithm.png|McDonald's]], [[:File:Taco Bell Receipt Luhn Algorithm.png|Taco Bell]], and [[:File:Tractor Supply Receipt Luhn Algorithm.png|Tractor Supply Co.]] receipts
* [[United States Postal Service]] package tracking numbers use a modified Luhn algorithm<ref>{{
* Italian VAT numbers ([[VAT identification number#European Union VAT identification numbers|Partita Iva]])<ref>{{Cite web |last=Albanese |first=Ilenia |date={{date|2022-08-10|DMY}} |title=A cosa serve la Partita Iva? Ecco cosa sapere |trans-title=What is a VAT number for? Here's what to know |url=https://www.partitaiva.it/partita-iva-cosa-serve/ |url-status=live |archive-url=https://web.archive.org/web/20240629162018/https://www.partitaiva.it/partita-iva-cosa-serve/ |archive-date={{date|2024-06-29|DMY}} |access-date={{date|2024-06-29|DMY}} |website=Partitaiva.it |language=it}}</ref>
==References==
<references/>
==Notes==
{{notelist}}
==External links==
* [https://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers
{{DEFAULTSORT:Luhn Algorithm}}
Line 244 ⟶ 152:
[[Category:1954 introductions]]
[[Category:Articles with example pseudocode]]
|