은행 카드 번호 가 Luhn 알고리즘 에 부합 되 는 지 확인 하고 Luhn 알고리즘 에 부합 되 는 은행 카드 번 호 를 생 성 합 니 다.
1. 은행 카드 번호 가 Luhn 알고리즘 에 부합 되 는 지 확인 합 니 다.
은행 카드 번호 의 검 사 는 Luhn 알고리즘 을 사용 하고 검사 과정 은 대체적으로 다음 과 같다.
1. 오른쪽 에서 왼쪽으로 옮 겨 다 니 며 모든 문자 t 에 대해 두 번 째 단 계 를 실행 하고 모든 계산 결 과 를 하나의 luhmSum 으로 추가 합 니 다.
2. 각 자리 에 대한 계산 규칙: 만약 에 이 자리 가 홀수 라면 이 자리 의 수치 자체 (Odd 라 고 가정) 를 되 돌려 줍 니 다. 짝수 자리 (Even 이 라 고 가정) 라면 Even 을 2 로 곱 하여 하나의 k 를 얻 습 니 다. 만약 에 k 가 한 자릿수 (10 이하) 라면 k 로 돌아 갑 니 다. 그렇지 않 으 면 k 의 한 자릿수 와 10 자리 수 를 합 친 값 kk 를 되 돌려 줍 니 다.
4. luhmSum 이 10 을 제거 할 수 있다 면 이 은행 번호 의 카드 번 호 는 Luhn 알고리즘 (즉 유효) 에 부합 되 고 그렇지 않 으 면 이 은행 번호 가 합 법 적 이지 않 은 Luhn 알고리즘 (즉 무효) 입 니 다.
검사 알고리즘 은 비교적 간단 합 니 다. python 의 실현:
방법 1:
설치 패키지: apt install python 3 - stdnum
from stdnum import luhn
luhn.is_유효한 (은행 카드번호)
방법 2:
import random
def checkBankCardNO(self,bankCardNO):
''' Luhm ( )'''
cardNO = bankCardNO.strip()
flag = ''
EvenSum = 0
OddSum = 0
luhmSum = 0
if cardNO.isdigit():
cardNOList =list(cardNO)
checkNO = int(cardNOList[(len(cardNOList)-1)])
for i in range(len(cardNOList)):
k = 0
if (i+1)%2 == 0:
k = int(cardNOList[(len(cardNOList)-1)-i]) * 2
kk = int(k / 10) + (k % 10)
EvenSum = EvenSum + kk
else:
OddSum = OddSum + int(cardNOList[(len(cardNOList)-1)-i])
luhmSum = 10 -(((EvenSum + OddSum) - checkNO) % 10)
return checkNO == luhmSum
2. Luhn 알고리즘 에 맞 는 은행 카드 번호 생 성
Luhn 알고리즘 에 맞 는 은행 카드 번 호 를 만 드 는 과정 은 대체적으로 다음 과 같 습 니 다.
1. 은행 카드 번호 가 n 자리 라 고 가정 하고 랜 덤 으로 n - 1 의 수치 문 자 를 생 성 하 며 문자열 preBank CardNO 라 고 합 니 다.
2. 문자열 preBankCardNO 에 n 자리 가 있다 고 가정 하고 (실제 오른쪽 에 있 는 한 자리 가 n - 1 자리 가 부족 하 다 고 가정) preBankCardNO 를 n 자리 길이 로 계산 하고 luhmSum 을 계산 합 니 다. 맨 오른쪽 에 있 는 첫 번 째 자리 가 부족 하고 건 너 뛰 기 를 무시 하기 때문에 계산 할 때 맨 오른쪽 에 있 는 한 자 리 는 2 부터 시작 합 니 다.
3. 이전 단계 에 문자열 preBankCardNO 의 검사 와 luhmSum 을 얻 었 습 니 다. uhmsum 모드 10 에서 얻 은 값 을 10 으로 빼 면 최종 결 과 는 검사 위치 수치 checkNO 입 니 다.
4. 최종 적 으로 Luhn 알고리즘 에 부합 되 는 은행 카드 번호 bankcardNO 는 preBankcardNO 문자열 뒤에 체크 비트 checkNO 문 자 를 추가 합 니 다.
방법 1:
def luhnBankCardNOGenerator(self):
''' Luhm '''
cardNO = '62'+ '%13d' % (random.randint(1, 9999999999999))
EvenSum = 0
OddSum = 0
cardNOList =list(cardNO)
print(cardNOList)
for i in range(len(cardNOList)):
k = 0
if i%2 == 0:
k = int(cardNOList[(len(cardNOList)-1)-i]) * 2
if int(k / 10):
kk = k - 9
print(kk)
else:
kk = k
EvenSum = EvenSum + kk
else:
OddSum = OddSum + int(cardNOList[(len(cardNOList)-1)-i])
checkNO = 10 - ((EvenSum + OddSum) % 10)
bankCardNO = cardNO + str(checkNO)
return bankCardNO
:
...
다음으로 전송:https://www.cnblogs.com/simplezhuo/p/9846218.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.