신용카드 번호 검증기|Luhn 알고리즘・카드사 판별
신용카드 번호를 입력하면 Luhn 알고리즘으로 체크 디지트를 검증하고 Visa・Mastercard・Amex 등의 카드사를 자동으로 판별합니다. 폼 유효성 검사 구현 확인에도 유용합니다.
[[ labels.client_side_note ]]
[[ 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를 거쳐야 합니다. 입력하신 번호는 브라우저 안에서만 처리되며 외부로 전송되지 않습니다.
카드 번호를 검증하는 절차
- 번호를 입력합니다 공백이나 하이픈이 들어 있어도 자동으로 제거되므로, 복사한 값을 그대로 붙여 넣으실 수 있습니다.
- 검사 숫자의 결과를 봅니다 Luhn 알고리즘에 의한 검증 결과가 유효·무효로 표시됩니다. 무효라면 자릿수 어딘가에 오류가 있습니다.
- 브랜드 판정을 확인합니다 앞자리 숫자와 자릿수로부터 브랜드를 추정합니다. 아래의 대응표에서 판정 조건도 확인하실 수 있습니다.
- 샘플로 동작을 시험합니다 샘플 버튼으로 테스트 번호를 입력하실 수 있습니다. 실재하는 번호를 쓰지 않고 동작을 확인하실 수 있습니다.
더 잘 활용하기 위한 팁
- 실제 카드 번호가 아닌 샘플 버튼의 테스트 번호(Visa: 4111 1111 1111 1111 등)로 동작을 확인할 수 있습니다.
- 공백이나 하이픈이 포함되어 있어도 자동으로 제거하고 판별하므로 복사한 번호를 그대로 붙여넣어도 됩니다.
- 본 도구는 Luhn 알고리즘을 이용한 형식 검사만 수행합니다. 실제 승인・잔액 확인은 결제대행사의 API를 이용하세요.
- 폼 유효성 검사를 구현할 때 정상 케이스(유효한 번호)와 오류 케이스(무효한 번호)를 모두 만들어 테스트하면 효율적입니다.
카드 번호 검증 도구의 활용 사례
폼의 입력 검증을 구현합니다
직접 만든 검증의 판정 결과와 맞춰 볼 수 있습니다. 정상 케이스와 오류 케이스 양쪽을 준비해 확인하실 수 있습니다.
브랜드 판정 로직을 확인합니다
앞자리 숫자와 자릿수로부터 어느 브랜드가 되는지를 대응표에서 확인하실 수 있습니다. 카드 아이콘을 구분해 표시하는 구현에 쓰실 수 있습니다.
입력 실수를 가려냅니다
결제가 되지 않을 때, 번호 자체의 형식에 오류가 있는지를 먼저 확인하실 수 있습니다. 원인을 가려내는 속도가 빨라집니다.
Luhn 알고리즘을 배웁니다
한 자리만 바꾼 번호를 넣어 보면 검증이 무효로 바뀌는 모습을 실제로 확인하실 수 있습니다. 구조를 이해하는 데 도움이 됩니다.
카드 번호 관련 용어
- Luhn 알고리즘
- 자릿수의 배열이 타당한지를 확인하는 계산 방법입니다. 오른쪽에서 한 자리씩 걸러 2배 한 뒤 합계하여, 10으로 나누어떨어지면 유효로 판정합니다.
- 검사 숫자
- 입력 실수를 검출하기 위해 끝자리에 붙이는 숫자입니다. 다른 자릿수로부터 계산으로 이끌어 냅니다.
- IIN
- 카드 번호 앞부분에 있는 발행자 식별 번호입니다. 이곳을 보면 브랜드나 발행처를 판별할 수 있습니다.
- 브랜드
- Visa·Mastercard·American Express 등의 국제 브랜드입니다. 앞자리 숫자와 자릿수의 조합으로 판정합니다.
- 승인 확인
- 그 카드가 실제로 쓸 수 있는지, 한도가 충분한지를 확인하는 처리입니다. 형식의 검증과는 전혀 별개의 절차입니다.
자주 묻는 질문
여담 ― 체크 디지트의 아버지, Hans Peter Luhn
신용카드 번호 끝자리에 있는 "체크 디지트"는 1954년 IBM 엔지니어 Hans Peter Luhn(한스 페터 룬)이 고안한 알고리즘으로 검증됩니다. 그는 이 공로로 1960년에 특허를 취득했지만, 지금은 특허가 만료되어 누구나 자유롭게 사용할 수 있는 공개 알고리즘이 되었습니다.
Luhn 알고리즘의 원리는 의외로 단순합니다. 카드 번호의 오른쪽 끝에서부터 한 자리씩 건너뛰며 숫자를 2배로 하고, 그 결과가 두 자리가 되면 각 자리를 더합니다(예: 8×2=16 → 1+6=7). 모든 자리를 합한 값이 10으로 나누어떨어지면 그 카드 번호는 형식상 유효하다고 판정됩니다.
이 알고리즘은 신용카드뿐 아니라 IMEI 번호(스마트폰 식별 번호)나 캐나다 사회보장번호 등 다양한 식별 번호의 오타 감지에도 응용되고 있습니다. 다만 Luhn 알고리즘은 어디까지나 "입력 실수를 감지"하기 위한 것으로, 그 카드 번호가 실제로 존재하는지 잔액이 있는지를 판정하는 것은 아닙니다.
카드 번호의 앞 6〜8자리는 "IIN(발급자 식별 번호)"이라고 불리며, 어느 국제 카드사・어느 발급 은행이 발행한 카드인지를 식별하는 정보가 담겨 있습니다. 본 도구의 카드사 판별 기능도 이 IIN 범위 패턴을 기반으로 동작합니다.