Hibernate Validator per Codice Fiscale e Partita Iva

On March 28, 2011, in Hibernate, by lucasterdev

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);
	}
}
 

Leave a Reply