신용 카드 번호가 있다고 가정합니다. 카드 번호가 유효한지 여부를 확인해야 합니다. 카드 번호에는 특정 속성이 있습니다 -
-
4, 5, 6으로 시작합니다.
-
길이는 16자리입니다.
-
숫자는 숫자만 포함해야 합니다.
-
'-'로 구분된 4개의 그룹으로 된 숫자가 있을 수 있습니다.
-
공백이나 밑줄과 같은 다른 구분 기호를 사용하면 안 됩니다.
-
동일한 숫자가 4개 이상 연속되어서는 안 됩니다.
따라서 입력이 s ="5423-2578-8632-6589"와 같으면 출력은 True가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- s의 '-' 개수가 0보다 크면
- a :="-"로 구분된 부분 목록
- p:=1
- 의 크기가 4와 같지 않으면
- p:=null
- a:=빈 목록
- 각 b에 대해 다음을 수행합니다.
- b의 크기가 4와 같지 않으면
- p:=null
- 루프에서 나오다
- b의 크기가 4와 같지 않으면
- 그렇지 않으면
- p :=4, 5 또는 6으로 시작하고 나머지는 15자리 숫자인 부분 문자열 검색
- s :=s에서 "-" 제거
- q :=4개 이상의 연속 문자가 동일한 부분 문자열 검색
- p가 null이 아니고 q가 null이면
- 참 반환
- 그렇지 않으면
- 거짓을 반환
예시
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
import re def solve(s): if s.count("-")>0: a = s.split("-") p=1 if len(a)!=4: p=None a=[] for b in a: if len(b)!=4: p=None break else: p = re.search("[456][0-9]{15}",s) s = s.replace("-","") q = re.search(".*([0-9])\\1{3}.*",s) if p!=None and q==None: return True else: return False s = "5423-2578-8632-6589" print(solve(s))
입력
"5423-2578-8632-6589"
출력
False