2023. 9. 5. 17:15
반응형

카드번호 유효성 검증용으로 사용하기 위해 만들었습니다.

주석은 변수 명으로 대신 합니다.

 

// 룬 알고리즘 validate 검사 (true - 알고리즘 통과, false - 알고리즘 미통과)
const validateLuhnAlgorithm = (cardNumber) => {
	if (!cardNumber || cardNumber.length < 10)	throw new Error("Card number must be at least 10 digits.");
	
	let cardNumberSplitted		= cardNumber.split("");
	let cardNumberSplittedLength	= cardNumberSplitted.length;
	let isRequiresCalculation	= cardNumberSplittedLength % 2 == 0;
	let sumCalculatedCardNumber	= 0;
	
	for (let i=0; i<cardNumberSplittedLength; i++) {
		let cardNumberEach	= Number(cardNumberSplitted[i]);
		let isLastLoop		= i == cardNumberSplittedLength - 1;
        
		if (isLastLoop)		isRequiresCalculation	= false;
		
		if (isRequiresCalculation) {
			cardNumberEach	= cardNumberEach * 2;
			if (cardNumberEach >= 10)	cardNumberEach = cardNumberEach - 9;
		}
		
		isRequiresCalculation	= !isRequiresCalculation;
		
		sumCalculatedCardNumber	+= cardNumberEach;
	}
	
	return sumCalculatedCardNumber % 10 == 0;
};

console.log(validateLuhnAlgorithm('1111111111111117'));
console.log(validateLuhnAlgorithm('4111111111111111'));
console.log(validateLuhnAlgorithm('4000000000000002'));
반응형

'Front-Html > Javascript' 카테고리의 다른 글

script background 호출  (0) 2022.05.18
Generator를 이용한 비동기 처리  (0) 2022.01.20
Promise async await를 이용한 비동기 처리  (0) 2022.01.20
javascript querySelector  (0) 2021.03.03
javascript 암복호화 처리  (0) 2016.09.01
Posted by seongsland