ArticleslgStudy

computer science

Luhn algorithm

Luhn algorithm is a computer science topic covered in the lgStudy science library. This page brings together a partial reference excerpt, illustrations, worked examples, real-world applications and a short study plan, so you can understand Luhn algorithm rather than just read about it. In short: The Luhn algorithm or Luhn formula (creator: IBM scientist Hans Peter Luhn), also known as the "modulus 10" or "mod 10" algorithm, is a simple check digit formula used to validate a variety of identification numbers. The purpose is to design a numbering scheme in such a way that when a human is entering a number, a computer can quickly check it for errors.

Key takeaways

  • Luhn algorithm belongs to computer science; place it in that map before memorising details.
  • Learn the definition first, then one example that makes the definition concrete.
  • Connect Luhn algorithm to a quantity you can measure, compute or draw — that is where exam questions come from.
  • Reproduce the core statement of Luhn algorithm from memory before moving on to harder problems.

Reference excerpt

The Luhn algorithm or Luhn formula (creator: IBM scientist Hans Peter Luhn), also known as the "modulus 10" or "mod 10" algorithm, is a simple check digit formula used to validate a variety of identification numbers. The purpose is to design a numbering scheme in such a way that when a human is entering a number, a computer can quickly check it for errors. The algorithm is in the public domain and is in wide use today. It is specified in ISO/IEC 7812-1. It is not intended to be a cryptographically secure hash function; it was designed to protect against accidental errors, not malicious attacks. Most credit card numbers 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:

Drop the check digit from the number (if it's already present). This leaves the payload. Start with the payload digits and double every second digit (a digit in an odd position in reversed order) when numbered from the left. Process the payload from right-to-left. If a doubled digit exceeds 9, subtract 9 from the digit. Sum all the resulting digits (including the ones that were not doubled). The check digit is calculated by ( 10 − ( s mod 10 ) ) mod 10 {\displaystyle (10-(s{\bmod {10}})){\bmod {10}}} , where s is the sum from step 4. This is the smallest number (possibly zero) that must be added to s {\displaystyle s} to make a multiple of 10. Other valid formulas giving the same value are 9 − ( ( s + 9 ) mod 10 ) {\displaystyle 9-((s+9){\bmod {10}})} , ( 10 − s ) mod 10 {\displaystyle (10-s){\bmod {10}}} , and 10 ⌈ s / 10 ⌉ − s {\displaystyle 10\lceil s/10\rceil -s} . Note that the formula ( 10 − s ) mod 10 {\displaystyle (10-s){\bmod {10}}} will not work in all environments due to differences in how negative numbers are handled by the modulo operation.

Example for computing check digit Assume an example of an account number 1789372997 (just the "payload", check digit not yet included):

The sum of the resulting digits is 56. The check digit is equal to ( 10 − ( 56 mod 10 ) ) mod 10 = 4 {\displaystyle (10-(56{\bmod {10}})){\bmod {10}}=4} . This makes the full account number read 17893729974.

Example for validating check digit Drop the check digit (last digit) of the number to validate. (e.g. 17893729974 → 1789372997) Calculate the check digit (see above) Compare your result with the original check digit. If both numbers match, the result is valid. (e.g. (givenCheckDigit = calculatedCheckDigit) ⇔ (isValidCheckDigit)).

Strengths and weaknesses The Luhn algorithm will detect all single-digit errors, as well as almost all transpositions of adjacent digits. It will not, however, detect transposition of the two-digit sequence 09 to 90 (or vice versa). It will detect most of the possible twin errors (it will not detect 22 ↔ 55, 33 ↔ 66 or 44 ↔ 77). Other, more complex check-digit algorithms (such as the Verhoeff algorithm and the Damm algorithm) can detect more transcription errors. The Luhn mod N algorithm is an extension that supports non-numerical strings. 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 for a simple, hand-held, mechanical device for computing the checksum. The device took the mod 10 sum by mechanical means. The substitution digits, that is, the results of the double and reduce procedure, were not produced mechanically. Rather, the digits were marked in their permuted order on the body of the machine.

Pseudocode implementation The following function takes a card number, including the check digit, as an array of integers and outputs true if the check digit is correct, false otherwise.

function isValid(cardNumber[1..length]) sum := 0 parity := length mod 2 for i from 1 to (length - 1) do if i mod 2 == parity then sum := sum + cardNumber[i] elseif cardNumber[i] > 4 then sum := sum + 2 * cardNumber[i] - 9 else sum := sum + 2 * cardNumber[i] end if end for return cardNumber[length] == ((10 - (sum mod 10)) mod 10) end function

Uses The Luhn algorithm is used in a variety of systems, including:

Credit card numbers IMEI numbers CUSIP numbers for North American financial instruments National Provider Identifier numbers in the United States Canadian social insurance numbers Israeli ID numbers South African ID numbers South African Tax reference numbers Swedish Personal identity numbers Swedish Corporate Identity Numbers (OrgNr) Greek Social Security Numbers (ΑΜΚΑ) ICCID of SIM cards European patent application numbers Survey codes appearing on McDonald's, Taco Bell, and Tractor Supply Co. receipts United States Postal Service package tracking numbers use a modified Luhn algorithm Italian VAT numbers (Partita Iva)

References

Notes

External links Luhn test of credit card numbers on Rosetta Code: Luhn algorithm/formula implementation in 160 programming languages as of 22 July 2024

Worked examples

Example 1 — a first encounter with Luhn algorithm

Start with the simplest possible case. Write down what Luhn algorithm claims or describes in one sentence, then invent the smallest concrete situation in which that sentence is true. In computer science, the smallest case is usually a single object, a single equation or a single measurement. Check that every symbol or term in your sentence has a meaning in that case.

Example 2 — changing one variable

Take the situation from Example 1 and change exactly one quantity: double it, halve it, or set it to zero. Predict what should happen to Luhn algorithm before you calculate. Comparing your prediction with the result is the fastest way to find out whether you understand the idea or only the words.

Example 3 — an exam-style question

Typical questions about Luhn algorithm ask you to (a) state it precisely, (b) apply it to given data, and (c) explain a limitation. Practise writing all three answers in under five minutes; the third part is what separates a full-mark answer from an average one.

Applications of Luhn algorithm

In research
Luhn algorithm appears in computer science research whenever the underlying quantities have to be modelled precisely. Papers usually cite it as a starting assumption and then explore where it breaks down.
In technology and industry
Engineering practice reuses Luhn algorithm in design rules, simulations and safety margins. Knowing the idea lets you read a specification sheet and understand why the numbers look the way they do.
In the classroom
Luhn algorithm is common in secondary-school and first-year university syllabi. It links to neighbouring topics 1954 introductions, Checksum algorithms, Error detection and correction, so understanding it makes those chapters shorter.
In everyday life
Look for Luhn algorithm outside the textbook — in sport, cooking, traffic, electronics or the sky above you. An example you found yourself is remembered far longer than one you were given.

Affiliate

Preply — study more efficiently by working with a personal tutor. 50% off.

How to study Luhn algorithm in 20 minutes

  1. Read the reference excerpt below once, without taking notes.
  2. Close the page and write down what Luhn algorithm means in your own words.
  3. Compare your version with the excerpt and mark what you missed.
  4. Work through the three examples above with pen and paper.
  5. Explain Luhn algorithm out loud to somebody else — or to Teacher Smith in the lgStudy chat.

Frequently asked questions

What is Luhn algorithm in simple terms?

The Luhn algorithm or Luhn formula (creator: IBM scientist Hans Peter Luhn), also known as the "modulus 10" or "mod 10" algorithm, is a simple check digit formula used to validate a variety of identification numbers. The purpose is to design a numbering scheme in such a way that when a human is ent…

Why does Luhn algorithm matter?

Because it connects several computer science ideas at once: it gives you a definition you can apply, a quantity you can calculate, and a way to check whether a result is plausible.

How should I study Luhn algorithm?

Read the excerpt, restate it from memory, then work through the examples and applications listed on this page. The five-step study plan above takes about twenty minutes.

What does this page cover?

It gives you a compact reference excerpt plus original lgStudy explanations, examples, applications and study material on Luhn algorithm.

Tags

  • 1954 introductions
  • Checksum algorithms
  • Error detection and correction
  • Modular arithmetic

Keep exploring