신용카드 번호 검증기|Luhn 알고리즘・카드사 판별

신용카드 번호를 입력하면 Luhn 알고리즘으로 체크 디지트를 검증하고 Visa・Mastercard・Amex 등의 카드사를 자동으로 판별합니다. 폼 유효성 검사 구현 확인에도 유용합니다.

[[ labels.client_side_note ]]

[[ labels.format_error ]]
[[ labels.sample_label ]]:
[[ labels.no_input ]]

[[ labels.result_label ]]

[[ labels.formatted_label ]] [[ result.formatted ]]
[[ labels.brand_label ]] [[ brandName ]] [[ labels.brand_unknown ]]
[[ labels.checksum_label ]] ✓ [[ labels.checksum_valid ]] ✗ [[ labels.checksum_invalid ]]

지원 브랜드 및 판별 조건(IIN・자릿수)

브랜드 시작 숫자(IIN) 자릿수
Visa 4 13, 16, 19
Mastercard 51–55, 2221–2720 16
American Express 34, 37 15
Discover 6011, 65 16
JCB 3528–3589 16
Diners Club 300–305, 36, 38 14
UnionPay 62 16–19

카드 번호 검증 도구란

신용카드 번호에는 입력 실수를 검출하기 위한 검사 숫자가 끝자리에 들어 있습니다. Luhn 알고리즘이라는 계산식으로 자릿수의 배열을 검증하면, 한 자리의 오타나 이웃한 자리끼리 뒤바뀐 경우의 대부분을 찾아낼 수 있습니다. 이 도구는 번호를 입력하면 그 검증을 수행하고, 아울러 앞자리 숫자와 자릿수로부터 카드 브랜드를 판정합니다.

중요한 것은 이것이 형식의 검증에 지나지 않는다는 점입니다. Luhn 검사를 통과하더라도 그 번호가 실재하는 카드라는 보장은 없으며, 사용 가능한지도 알 수 없습니다. 실제 승인 확인은 결제대행사의 API를 거쳐야 합니다. 입력하신 번호는 브라우저 안에서만 처리되며 외부로 전송되지 않습니다.

카드 번호를 검증하는 절차

  1. 번호를 입력합니다 공백이나 하이픈이 들어 있어도 자동으로 제거되므로, 복사한 값을 그대로 붙여 넣으실 수 있습니다.
  2. 검사 숫자의 결과를 봅니다 Luhn 알고리즘에 의한 검증 결과가 유효·무효로 표시됩니다. 무효라면 자릿수 어딘가에 오류가 있습니다.
  3. 브랜드 판정을 확인합니다 앞자리 숫자와 자릿수로부터 브랜드를 추정합니다. 아래의 대응표에서 판정 조건도 확인하실 수 있습니다.
  4. 샘플로 동작을 시험합니다 샘플 버튼으로 테스트 번호를 입력하실 수 있습니다. 실재하는 번호를 쓰지 않고 동작을 확인하실 수 있습니다.

더 잘 활용하기 위한 팁

  • 실제 카드 번호가 아닌 샘플 버튼의 테스트 번호(Visa: 4111 1111 1111 1111 등)로 동작을 확인할 수 있습니다.
  • 공백이나 하이픈이 포함되어 있어도 자동으로 제거하고 판별하므로 복사한 번호를 그대로 붙여넣어도 됩니다.
  • 본 도구는 Luhn 알고리즘을 이용한 형식 검사만 수행합니다. 실제 승인・잔액 확인은 결제대행사의 API를 이용하세요.
  • 폼 유효성 검사를 구현할 때 정상 케이스(유효한 번호)와 오류 케이스(무효한 번호)를 모두 만들어 테스트하면 효율적입니다.

카드 번호 검증 도구의 활용 사례

폼의 입력 검증을 구현합니다

직접 만든 검증의 판정 결과와 맞춰 볼 수 있습니다. 정상 케이스와 오류 케이스 양쪽을 준비해 확인하실 수 있습니다.

브랜드 판정 로직을 확인합니다

앞자리 숫자와 자릿수로부터 어느 브랜드가 되는지를 대응표에서 확인하실 수 있습니다. 카드 아이콘을 구분해 표시하는 구현에 쓰실 수 있습니다.

입력 실수를 가려냅니다

결제가 되지 않을 때, 번호 자체의 형식에 오류가 있는지를 먼저 확인하실 수 있습니다. 원인을 가려내는 속도가 빨라집니다.

Luhn 알고리즘을 배웁니다

한 자리만 바꾼 번호를 넣어 보면 검증이 무효로 바뀌는 모습을 실제로 확인하실 수 있습니다. 구조를 이해하는 데 도움이 됩니다.

카드 번호 관련 용어

Luhn 알고리즘
자릿수의 배열이 타당한지를 확인하는 계산 방법입니다. 오른쪽에서 한 자리씩 걸러 2배 한 뒤 합계하여, 10으로 나누어떨어지면 유효로 판정합니다.
검사 숫자
입력 실수를 검출하기 위해 끝자리에 붙이는 숫자입니다. 다른 자릿수로부터 계산으로 이끌어 냅니다.
IIN
카드 번호 앞부분에 있는 발행자 식별 번호입니다. 이곳을 보면 브랜드나 발행처를 판별할 수 있습니다.
브랜드
Visa·Mastercard·American Express 등의 국제 브랜드입니다. 앞자리 숫자와 자릿수의 조합으로 판정합니다.
승인 확인
그 카드가 실제로 쓸 수 있는지, 한도가 충분한지를 확인하는 처리입니다. 형식의 검증과는 전혀 별개의 절차입니다.

자주 묻는 질문

아니요, 막을 수 없습니다. 본 도구는 Luhn 알고리즘을 이용한 형식 검사만 수행하며, 그 카드가 실제로 존재하는지, 정지되었는지, 잔액이 충분한지는 판정할 수 없습니다. 실제 승인 확인에는 결제대행사의 인증 시스템이 필요합니다.

입력한 번호는 서버로 전송되지 않고 모든 계산이 브라우저 내 JavaScript에서 이루어집니다. 다만 동작 확인이 목적이라면 실제 번호 대신 샘플 버튼으로 제공되는 테스트 번호 사용을 권장합니다.

1954년 IBM의 Hans Peter Luhn이 고안한 오류 감지 알고리즘입니다. 카드 번호의 오른쪽 끝에서부터 한 자리씩 건너뛰며 2배로 하고, 각 자리의 합이 10의 배수가 되면 형식상 유효하다고 판정합니다. 대부분의 오타를 감지할 수 있습니다.

카드 번호 앞부분 몇 자리(IIN: 발급자 식별 번호)와 자릿수 조합으로 판별합니다. 예를 들어 Visa는 "4"로 시작하며 13・16・19자리, Mastercard는 "51〜55" 등으로 시작하며 16자리, JCB는 "3528〜3589"로 시작하며 16자리인 것처럼 공개된 규칙에 기반합니다. 자세한 대응표는 페이지 하단의 "지원 브랜드 및 판별 조건"을 참고해 주세요.

아니요. Luhn 알고리즘 통과는 "형식상 모순이 없다"는 것을 확인할 뿐입니다. 실재하지 않는 임의의 숫자열이라도 마지막 한 자리만 조정하면 Luhn 검사를 통과시킬 수 있습니다.
툴군

여담 ― 체크 디지트의 아버지, Hans Peter Luhn

신용카드 번호 끝자리에 있는 "체크 디지트"는 1954년 IBM 엔지니어 Hans Peter Luhn(한스 페터 룬)이 고안한 알고리즘으로 검증됩니다. 그는 이 공로로 1960년에 특허를 취득했지만, 지금은 특허가 만료되어 누구나 자유롭게 사용할 수 있는 공개 알고리즘이 되었습니다.

Luhn 알고리즘의 원리는 의외로 단순합니다. 카드 번호의 오른쪽 끝에서부터 한 자리씩 건너뛰며 숫자를 2배로 하고, 그 결과가 두 자리가 되면 각 자리를 더합니다(예: 8×2=16 → 1+6=7). 모든 자리를 합한 값이 10으로 나누어떨어지면 그 카드 번호는 형식상 유효하다고 판정됩니다.

이 알고리즘은 신용카드뿐 아니라 IMEI 번호(스마트폰 식별 번호)나 캐나다 사회보장번호 등 다양한 식별 번호의 오타 감지에도 응용되고 있습니다. 다만 Luhn 알고리즘은 어디까지나 "입력 실수를 감지"하기 위한 것으로, 그 카드 번호가 실제로 존재하는지 잔액이 있는지를 판정하는 것은 아닙니다.

카드 번호의 앞 6〜8자리는 "IIN(발급자 식별 번호)"이라고 불리며, 어느 국제 카드사・어느 발급 은행이 발행한 카드인지를 식별하는 정보가 담겨 있습니다. 본 도구의 카드사 판별 기능도 이 IIN 범위 패턴을 기반으로 동작합니다.