모든 아티클

Luhn 알고리즘: 카드 번호의 정확성을 확인하는 방법

카드 번호의 마지막 자리는 임의로 정해진 것이 아니라, 사람이 긴 번호를 결제 양식에 직접 옮겨 적을 때 흔히 저지르는 실수를 잡아내기 위해 설계된 검증 숫자다.

루운 알고리즘의 작동 방식

이 알고리즘은 번호의 각 자리를 오른쪽에서 왼쪽으로 훑으면서 짝수 번째 자리를 2배로 만들고, 그 결과가 9를 넘으면 9를 뺀다. 번호가 올바르게 입력되었다면 이렇게 얻은 모든 자릿수의 합은 10으로 나누어떨어진다.

Visa나 Mastercard가 아니라 1950년대 IBM의 발명품

이 알고리즘은 1954년 임의의 숫자열에서 발생하는 필사 오류를 잡아내는 범용 방법으로 특허를 낸 IBM 과학자 한스 페터 루운(Hans Peter Luhn)의 이름을 따서 붙여졌다 — 원래는 결제 카드와 직접적인 관련이 없었다. 결제 네트워크들이 이후 이를 채택한 이유는 계산 비용이 낮으면서도 수기 입력에서 가장 흔한 두 가지 실수, 즉 한 자리 오타와 인접한 두 자리의 순서 바뀜을 확실히 잡아내기 때문이다.

루운 검증을 통과해도 카드가 실제로 존재한다는 뜻은 아니다

루운 검증은 번호의 수학적 구조만 확인할 뿐, 그 뒤에 실제 계좌가 있는지는 알려주지 않는다. 이 검증을 통과하는 번호는 수백만 개라도 쉽게 만들어낼 수 있지만 그중 실제 카드와 연결된 것은 없을 수 있다 — 그래서 실제 결제는 결국 카드 발급 은행을 통한 확인을 반드시 거쳐야 한다.

이 기능이 쓸모 있는 경우

  • 양식을 서버로 보내기 전에 클라이언트 단에서 잘못 입력된 카드 번호를 잡아낸다.
  • 긴 번호를 손으로 입력할 때 생긴 명백한 오타를 빠르게 걸러낸다.
  • 루운 검증이 실제로 무엇을 증명하고 무엇을 증명하지 못하는지 이해한다.

번호로 결제 네트워크 식별하기 (BIN)

카드 번호의 앞부분 몇 자리는 BIN(Bank Identification Number)이라 불리며, 전체 루운 검증을 하기도 전에 결제 네트워크를 알려준다. Visa 번호는 4로, Mastercard는 51–55 범위 또는 더 최근의 2221–2720 범위로, American Express는 34나 37로 시작한다. 결제 양식이 번호를 다 입력하기도 전에 알맞은 네트워크 아이콘을 보여줄 수 있는 것은 바로 이 앞자리 덕분이다.

도구 사용해보기