Java
룬 알고리즘 체크용 java 소스
seongsland
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"));
}