org.hibernate.validator.internal.constraintvalidators.hv.LuhnCheckValidator Maven / Gradle / Ivy
/*
* Hibernate Validator, declare and validate application constraints
*
* License: Apache License, Version 2.0
* See the license.txt file in the root directory or .
*/
package org.hibernate.validator.internal.constraintvalidators.hv;
import java.util.List;
import jakarta.validation.ConstraintValidator;
import org.hibernate.validator.constraints.LuhnCheck;
import org.hibernate.validator.internal.util.ModUtil;
/**
* Luhn algorithm checksum validator
*
* http://en.wikipedia.org/wiki/Luhn_algorithm
* http://en.wikipedia.org/wiki/Check_digit
*
* @author George Gastaldi
* @author Hardy Ferentschik
* @author Victor Rezende dos Santos
*/
public class LuhnCheckValidator extends ModCheckBase
implements ConstraintValidator {
@Override
public void initialize(LuhnCheck constraintAnnotation) {
super.initialize(
constraintAnnotation.startIndex(),
constraintAnnotation.endIndex(),
constraintAnnotation.checkDigitIndex(),
constraintAnnotation.ignoreNonDigitCharacters()
);
}
/**
* Validate check digit using Luhn algorithm
*
* @param digits The digits over which to calculate the checksum
* @param checkDigit the check digit
*
* @return {@code true} if the luhn check result matches the check digit, {@code false} otherwise
*/
@Override
public boolean isCheckDigitValid(List digits, char checkDigit) {
int modResult = ModUtil.calculateLuhnMod10Check( digits );
if ( !Character.isDigit( checkDigit ) ) {
return false;
}
int checkValue = extractDigit( checkDigit );
return checkValue == modResult;
}
}