몇 가지 간단한 정규 표현식을 사용하면 고객이 주문 양식에 유효한 신용 카드 번호를 입력했는지 쉽게 확인할 수 있습니다. 심지어 사용 되는 신용 카드의 종류를 확인할 수 있습니다. 각 카드 발급자는 처음 4 자리 숫자로 식별되는 자체 카드 번호 범위를 가지고 있습니다.
약간 다른 정규식을 사용하여 더 큰 문서 내에서 신용 카드 번호 또는 신용 카드 번호일 수 있는 번호 시퀀스를 찾을 수 있습니다. 이는 보안 감사에서 고객의 재무 정보를 부적절하게 노출하지 않는다는 것을 입증하는 데 매우 유용 할 수 있습니다.
우리는 주문 양식으로 시작합니다.
공백 및 대시 제거
첫 번째 단계는 고객이 입력 한 카드 번호에서 숫자가 아닌 모든 숫자를 제거하는 것입니다. 물리적 신용 카드는 쉽게 인간이 읽거나 입력 할 수있게 그룹 자리 카드 번호 내에서 공백이 있습니다. 그래서 주문 양식은 공백 또는 그들에 대시 카드 번호를 받아 들여야한다.
카드 번호에서 숫자가 아닌 모든 숫자를 제거하려면 스크립팅 언어의”모두 바꾸기”기능을 사용하여 정규식+를 검색하고 아무 것도 바꾸지 마십시오. 공백과 대시 만 바꾸려면+를 사용할 수 있습니다. 이 정규식이 이상하게 보이면 문자 클래스에서 하이픈은 닫는 대괄호 바로 앞에(또는 여는 대괄호 또는 부정 캐럿 바로 뒤에)발생할 때 리터럴이라는 것을 기억하십시오.
플러스가 무엇인지 궁금하다면 성능을위한 것입니다. 입력에 1===2 와 같은 연속 숫자가 아닌 경우+는 한 번에 세 개의 등호를 일치시키고 한 번의 대체에서 삭제합니다. 플러스가 없으면 세 가지 교체가 필요합니다. 이 경우 저축은 불과 몇 마이크로 초입니다. 그러나 당신의 마음 뒤에 정규식 효율성을 유지하는 것은 좋은 습관입니다. 저축은 여기에 최소한의 있지만,그래서 여분의 플러스를 입력하는 노력이다.
주문 양식에서 신용 카드 번호 유효성 검사
신용 카드 번호 유효성 검사는 정규 표현식에 이상적인 작업입니다. 그들은 카드 발급을 식별 시작에 몇 가지 특정 숫자,13~16 자리의 단지 순서입니다. 아래의 특정 정규 표현식을 사용하여 고객이 허용하지 않는 종류의 카드를 사용하려고 할 때 경고하거나 다른 카드를 사용하여 주문을 다른 프로세서로 라우팅할 수 있습니다. 이 모든 정규식은 정규식 버디의 라이브러리에서 가져 왔습니다.
- 비자:^4{12}(?:{3})?$모든 비자 카드 번호는 시작 4. 새 카드에는 16 자리 숫자가 있습니다. 오래된 카드가 13.
- 마스터 카드:^(?:5{2}|222|22|2{2}|27|2720){12}$ 마스터 카드 번호는 숫자 51~55 또는 숫자 2221~2720 으로 시작합니다. 모두 16 자리 숫자가 있습니다.
- 아메리칸 익스프레스:^3{13}$아메리칸 익스프레스 카드 번호는 34 또는 37 로 시작하여 15 자리입니다.
- 다이너스 클럽:^3(?:0/){11}$다이너스 클럽 카드 번호는 300 에서 305,36 또는 38 로 시작합니다. 모두 14 자리 숫자입니다. 5 로 시작 하 고 16 자리 다이너스 클럽 카드가 있다. 이들은 다이너스 클럽과 마스터 카드 사이의 합작 투자이며,마스터 카드처럼 처리해야합니다.
- 발견:^6(?:011/5{2}){12}$ 발견 카드 번호는 6011 또는 65 로 시작합니다. 모두 16 자리 숫자가 있습니다.
- 2131 또는 1800 으로 시작하는 카드는 15 자리입니다. 35 로 시작하는 카드는 16 자리입니다.
카드 번호가 유효한지 확인하려면 브랜드를 결정하지 않고 위의 6 개의 정규식을 교대를 사용하여 결합 할 수 있습니다. 캡처하지 않는 그룹은 앵커를 교대 외부에 배치합니다. 자유 간격은 주석 및 정규식이 페이지의 너비에 맞게 할 수 있습니다.
^(?:4{12}(?:{3})? #비자
|(?:5{2}#마스터 카드
| 222/22/2{2}|27|2720){12}
| 3{13} # 아메리칸 익스프레스
|3(?:0/){11}#다이너스 클럽
/6(?:011/5{2}){12} # 발견
|(?2131/1800/35
)$
이 정규 표현식은 고객이 너무 많거나 너무 적은 숫자를 입력했기 때문에 유효하지 않은 숫자를 쉽게 잡을 수 있습니다. 그들은 잘못된 숫자로 숫자를 잡을 수 없습니다. 이를 위해 룬 알고리즘을 따라야합니다.이 알고리즘은 정규식으로 수행 할 수 없습니다. 물론,그 숫자가 수학적으로 유효하더라도,이 번호가있는 카드가 발급되었거나 계좌에 돈이 있다는 것을 의미하지는 않습니다. 이점 또는 정규 표현식은 고객이 신용 카드 프로세서가 주문을 실패 할 때까지 30 초를 기다리는 대신 약간의 자바 스크립트에 넣어 명백한 오류를 즉시 확인할 수 있다는 것입니다. 그리고 카드 프로세서가 실패한 거래에 대해 요금을 부과한다면,당신은 정말로 정규식과 룬 검증을 모두 구현하기를 원할 것입니다.
문서에서 신용 카드 번호 찾기
두 가지 간단한 수정을 사용하면 위의 정규식 중 하나를 사용하여 더 큰 문서에서 카드 번호를 찾을 수 있습니다. 단순히 캐럿과 달러를 단어 경계로 바꾸기\비 4{12}(?:{3})?\비.
대용량 문서 서버를 검색하려는 경우 일반 표현식을 사용하면 검색 속도가 빨라집니다. 당신의 회사가 다른 목적을 위해 16 자리 숫자를 사용하지 않는 한,당신은 몇 가지 잘못된 반응을해야합니다. 정규식\비\디{13,16}\비 13~16 자리의 시퀀스를 찾을 수 있습니다.
파일로 가득 찬 하드 디스크를 검색 할 때 단일 카드 번호의 유효성을 검사 할 때처럼 먼저 공백과 대시를 제거 할 수 없습니다. 공백 또는 대시가있는 카드 번호를 찾으려면\비(?:\디*?){13,16}\비.이 정규식은 숫자의 어느 곳에서나 공백과 대시를 허용합니다. 이것은 진짜로 유일한 방법 이다. 아멕스와 디스 커버는 4,5,6 자리의 그룹을 사용하는 동안 비자와 마스터 카드는 4 세트의 숫자를 넣어. 숫자를 입력하는 사람들은 아직 다른 아이디어를 가질 수 있습니다.
기부
이 웹 사이트는 당신에게 서점에 여행을 저장 했습니까? 이 사이트를 지원하기 위해 기부를하시기 바랍니다,당신은이 사이트에 광고 무료 액세스의 수명을 얻을 것이다!