Per Hibernate Validator 4.2.0.Final
Per la partita IVA:
import java.lang.annotation.*; import org.hibernate.validator.ValidatorClass; @ValidatorClass(PartitaIvaValidator.class) @Target({ ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface PartitaIva { String message() default "{validator.partitaIva}"; }
import java.io.Serializable; import org.hibernate.validator.Validator; public class PartitaIvaValidator implements Validator<PartitaIva>, Serializable { public void initialize(PartitaIva parameters) { } public boolean isValid(Object value) { if (value == null) { return true; } if (!(value instanceof String)) { return false; } String partitaIva = (String) value; if (partitaIva.length() == 0) { return true; } int i, c, s; if (partitaIva.length() != 11) { return false; } for (i = 0; i < 11; i++) { if (partitaIva.charAt(i) < '0' || partitaIva.charAt(i) > '9') { return false; } } s = 0; for (i = 0; i <= 9; i += 2) { s += partitaIva.charAt(i) - '0'; } for (i = 1; i <= 9; i += 2) { c = 2 * (partitaIva.charAt(i) - '0'); if (c > 9) { c = c - 9; } s += c; } return (10 - s % 10) % 10 == partitaIva.charAt(10) - '0'; } }
Per il codice fiscale
import java.lang.annotation.*; import org.hibernate.validator.ValidatorClass; @ValidatorClass(CodiceFiscaleValidator.class) @Target({ ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface CodiceFiscale { String message() default "{validator.codiceFiscale}"; }
import org.hibernate.validator.Validator; public class CodiceFiscaleValidator implements Validator<CodiceFiscale>, Serializable { private java.util.regex.Pattern pattern; private String regex = "^[A-Za-z]{6}[0-9]{2}[A-Za-z][0-9]{2}[A-Za-z][0-9]{3}[A-Za-z]$"; private int dispari[] = { 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23 }; public void initialize(CodiceFiscale parameters) { pattern = java.util.regex.Pattern.compile(regex); } public boolean isValid(Object value) { if (value == null) { return true; } if (!(value instanceof String)) { return false; } String string = (String) value; if (string.length() == 0) { return true; } Matcher m = pattern.matcher(string); if (!m.matches()) { return false; } String cf = string.toUpperCase(); int i = 0, s = 0, c = 0; for (i = 1; i <= 13; i += 2) { c = cf.charAt(i); if (c >= '0' && c <= '9') { s = s + c - '0'; } else { s = s + c - 'A'; } } for (i = 0; i <= 14; i += 2) { c = cf.charAt(i); if (c >= '0' && c <= '9') { c = c - '0' + 'A'; } s = s + dispari1; } return s % 26 + 'A' == cf.charAt(15); } }