·2분 읽기

카드번호 정규식 검증 — 비자·마스터카드·아멕스 실전 패턴

카드사별로 시작 숫자와 자릿수가 달라요. 비자, 마스터카드, 아멕스, 디스커버 각각의 정규식 패턴과 Luhn 검증까지 정리했어요.

카드번호 정규식 검증 — 비자·마스터카드·아멕스 실전 패턴
🔍
정규식 테스터 바로 사용하기
정규표현식을 테스트하고 매치 결과를 확인하세요

카드번호 검증이 왜 어려운가

카드사마다 번호 규칙이 달라요. 비자는 4로 시작해 13 또는 16자리, 아멕스는 34/37로 시작해 15자리, 마스터카드는 51~55 또는 2221~2720으로 시작해 16자리예요. 정규식만으로는 80% 검증이 가능하고, 나머지 20%는 Luhn 알고리즘을 써야 완전해져요.

카드사별 정규식 패턴

주요 4대 카드사 패턴이에요. - Visa: 4로 시작, 13 또는 16자리 - MasterCard: 51~55 또는 2221~2720으로 시작, 16자리 - American Express: 34 또는 37로 시작, 15자리 - Discover: 6011 또는 65XX로 시작, 16자리 공백과 하이픈을 허용하려면 입력을 replace로 먼저 정리하세요.

통합 검증 함수 (JavaScript)

function detectCardType(num) { const clean = num.replace(/[^0-9]/g, ''); if (/^4[0-9]{12}([0-9]{3})?$/.test(clean)) return 'Visa'; if (/^5[1-5][0-9]{14}$/.test(clean)) return 'MasterCard'; if (/^3[47][0-9]{13}$/.test(clean)) return 'Amex'; if (/^6(?:011|5[0-9]{2})[0-9]{12}$/.test(clean)) return 'Discover'; return 'Unknown'; } 이 함수로 카드 입력 폼에서 실시간 카드사 감지가 가능해요.

Luhn 알고리즘으로 최종 검증

정규식 통과한 번호도 Luhn 체크를 해야 유효한 카드번호예요. function luhnCheck(num) { const digits = num.replace(/[^0-9]/g, '').split('').reverse().map(Number); let sum = 0; digits.forEach((d, i) => { if (i % 2 === 1) { d *= 2; if (d > 9) d -= 9; } sum += d; }); return sum % 10 === 0; } 실제 결제 폼에서는 정규식 → Luhn → 카드사 BIN 테이블 조회 순으로 검증하는 게 표준이에요.

포매팅도 같이 처리하기

입력 중 자동으로 4자리씩 띄어 쓰기를 넣으면 UX가 좋아요. function formatCard(num) { const clean = num.replace(/[^0-9]/g, ''); return clean.match(/.{1,4}/g)?.join(' ') || ''; } 아멕스는 15자리라 4-6-5로 포매팅해요. 카드 종류 감지한 뒤 포맷을 다르게 적용하세요.

Toolkio Regex Tester로 안전하게 확인

정규식 작성 중 실제 카드번호를 넣기 꺼려지죠. Toolkio의 Regex Tester는 브라우저 안에서만 돌아가서 서버로 데이터가 가지 않아요. 카드번호 샘플은 4242 4242 4242 4242 같은 공개 테스트 번호만 쓰세요.

지금 바로 정규식 테스터를 사용해보세요

무료이며, 브라우저에서 바로 실행됩니다.

정규식 테스터