Content deleted Content added
→TypeScript: "number" is a reserved keyword, as it is a type |
No edit summary |
||
(26 intermediate revisions by 23 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 [[United States|US]] patent 2950048A, granted on {{date|1960-08-23|DMY}}.<ref name="US2950048A">{{cite patent|title=Computer for Verifying Numbers|country=US|number=2950048A|status=patent|pubdate={{date|1960-08-23|DMY}}|gdate={{date|1960-08-23|DMY}}|invent1=Luhn|inventor1-first=Hans Peter|fdate=1954-01-06|inventorlink=Hans Peter Luhn}}</ref>}}
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|title=Identification cards {{mdash}} Identification of issuers {{mdash}} Part 1: Numbering system|number=[[ISO/IEC 7812]]-1:{{date|2017|DMY}}|institution=[[International Organization for Standardization]] & [[International Electrotechnical Commission]]|date={{date|Jan 2017|DMY}}|type=standard|url=https://www.iso.org/standard/70484.html|chapter=Annex B: Luhn formula for computing modulus-10 “double-add-double” check digits}}</ref> It is not intended to be a [[cryptographic hash function|cryptographically secure hash function]]; it was designed to protect against accidental errors, not malicious attacks. Most [[credit card number]]s and many [[government identification numbers]] use the algorithm as a simple method of distinguishing valid numbers from mistyped or otherwise incorrect numbers.
==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.
=== Example for computing check digit ===
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 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 267 ⟶ 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 272 ⟶ 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 283 ⟶ 139:
==References==
<references/>
==Notes==
{{notelist}}
==External links==
Line 293 ⟶ 152:
[[Category:1954 introductions]]
[[Category:Articles with example pseudocode]]
|