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

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

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

 

/**
 * 룬 알고리즘 validate 검사
 * @param cardNumber
 * @return boolean validate 여부 (true - 알고리즘 통과, false - 알고리즘 미통과)
 */
public static boolean validateLuhnAlgorithm(String cardNumber) {
	if (cardNumber == null || "".equals(cardNumber) || cardNumber.length() < 10) {
		throw new IllegalArgumentException("Card number must be at least 10 digits.");
	}
	
	String[] cardNumberSplitted	= cardNumber.split("");
	int cardNumberSplittedLength	= cardNumberSplitted.length;
	boolean	isRequiresCalculation	= cardNumberSplittedLength % 2 == 0;
	int sumCalculatedCardNumber	= 0;
	
	for (int i=0; i<cardNumberSplittedLength; i++) {
		int cardNumberEach	= Integer.parseInt(cardNumberSplitted[i]);
		boolean 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;
}

public static void main(String[] args) throws Exception {
	System.out.println(validateLuhnAlgorithm("1111111111111117"));
	System.out.println(validateLuhnAlgorithm("4111111111111111"));
	System.out.println(validateLuhnAlgorithm("4000000000000002"));
}
반응형

'Java' 카테고리의 다른 글

java rmi sample (간단한 예제)  (0) 2024.04.29
null 처리에 대한 코딩 방식  (1) 2022.07.15
java Object deep clone 비교  (0) 2022.06.29
tomcat localhost ssl 적용을 위한 키 생성  (0) 2021.02.05
RSA 암호화 java 구현 class  (0) 2018.02.23
Posted by seongsland