카드번호 유효성 검증용으로 사용하기 위해 만들었습니다.
주석은 변수 명으로 대신 합니다.
/**
* 룬 알고리즘 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 |