Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để kiểm tra số thẻ tín dụng có hợp lệ hay không

Giả sử chúng ta có một số thẻ tín dụng. Chúng ta phải kiểm tra xem số thẻ có hợp lệ hay không. Số thẻ có một số thuộc tính nhất định -

  • Nó sẽ bắt đầu bằng 4, 5 và 6

  • Nó sẽ dài 16 chữ số

  • Số chỉ được chứa các chữ số

  • Nó có thể có các chữ số trong bốn nhóm được phân tách bằng '-'

  • Nó không được sử dụng bất kỳ dấu phân tách nào khác như dấu cách hoặc dấu gạch dưới

  • Nó không được có 4 chữ số giống nhau liên tiếp trở lên

Vì vậy, nếu đầu vào giống như s ="5423-2578-8632-6589", thì đầu ra sẽ là True

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu số '-' trong s lớn hơn 0, thì
    • a:=danh sách các phần được phân tách bằng "-"
    • p:=1
    • nếu kích thước của a không bằng 4, thì
      • p:=null
      • a:=danh sách trống
    • đối với mỗi b trong a, thực hiện
      • nếu kích thước của b không bằng 4, thì
        • p:=null
        • ra khỏi vòng lặp
  • nếu không,
    • p:=tìm kiếm một chuỗi con bắt đầu bằng 4 hoặc 5 hoặc 6 và còn lại là các số có 15 chữ số
    • s:=remove "-" khỏi s
    • q:=chuỗi con tìm kiếm trong đó 4 hoặc nhiều ký tự liên tiếp giống nhau
    • nếu p không null và q là null, thì
      • trả về True
    • nếu không,
      • trả về Sai

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn

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))

Đầu vào

"5423-2578-8632-6589"

Đầu ra

False