[crayon lang=”php” title=”Class ContrDati”]
Author: Zordan Marco <marco[at]customsoft.it>
Version: 1.00

The latest version of ContrDati can be obtained from:

ContrDati: per la validazione dei dati in entrata

Metodi:
Booleano($sDato,$sDefault=true) : Restituisce valore booleano
CodiceFiscale($sDato) : Restituisce array($nErrore,$sDato).
Dominio($sDato,$nLun=100) : Restituisce il dominio o “” se non è corretto
Email($sDato,$nLun=100) : Restituisce l’email o -1 (non è email) o -2 (non esiste dominio)
Ip($sDato) : Restituisce l’ip se è un ip valido
Link($sDato,$nLun=100) : Restituisce un link con http:// o mailto://
Numero($sDato,$sDefault=0,$bDb=true) : Restituisce valore numerico
PartitaIva($sDato) : Restituisce array($nErrore,$sDato)
Stringa($sDato,$nLun,$bDb=true) : Restituisce un valore stringa
Url($sDato,$nLun=100) : Restituisce l’Url codificato
*************************************************/

class ContrDati {
/**** Public variables ****/
/* user definable vars */
var $sEmailCheckEmail=””;

###################################
# verifica che sia un valore booleano
# ed imposta il default se vuoto
function Booleano($sDato,$sDefault=true){
if ($sDato===true || $sDato===”true” || $sDato===”True” ||
$sDato===”on” || $sDato===”checked” || $sDato===”t” ||
$sDato===”v” || $sDato===”vero” ){
//echo $sDato;
return true;
}else{
return false;
}
}

###################################
# verifica che sia un codice fiscale
# restituisce un array con codice errore ed il dato
# Codici errore:
# -2: codice di controllo non corretto
# -1: formato codice fiscale non corretto
# 0 : nessun errore
# >0: numero di caratteri che mancano (min 16 – max 15)
# >16:numero di caratteri totali se superiore a 16 (max 16)
function CodiceFiscale($sDato){
$nLungMax=16; $nCheck=0;
$sDato = strtoupper(trim(”.$sDato));
$nLungDato=strlen($sDato);
if ($nLungDato<$nLungMax){ $nErrore = $nLungMax-$nLungDato; } else { if ($nLungDato>$nLungMax){
$nErrore = $nLungDato;
} else {
if (preg_match(“/\b[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]\b/”,$sDato) ) {
$sSet1 = “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
$sSet2 = “ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ”;
$sSetPari = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
$sSetDisp = “BAKPLCQDREVOSFTGUHMINJWZYX”;
$sCheck = 0;
for ($y=0;$y<=14;$y+=2){
$nCheck += strpos($sSetDisp,substr($sSet2,strpos($sSet1,substr($sDato,$y,1)),1));
}
for ($y=1;$y<=13;$y+=2){
$nCheck += strpos($sSetPari,substr($sSet2,strpos($sSet1,substr($sDato,$y,1)),1));
}
if (($nCheck%26) != (ord(substr($sDato,-1))-ord(“A”))) {
$nErrore = -2;
} else {
$nErrore = 0;
}
} else {
$nErrore = “-1″;
}
}
}
return array($nErrore,$sDato);
}

###################################
# verifica che sia una dominio
function Dominio($sDato,$nLun=100){
$sDato=trim(”.$sDato);
if (intval($nLun) < strlen($sDato)) { $sDato = substr($sDato, 0, $nLun); } if (strlen($sDato) > 0) {
if (preg_match(“`^(([a-z0-9_-]+\.)*)(([a-z0-9-]{2,})\.)([a-z0-9]{2,6})$`iU”,$sDato,$aUrl) ) {
return $sDato;
}else{
return “”;
}
} // if (strlen($sDato) > 0) {
}

###################################
# verifica che sia una mail
function Email($sDato,$nLun=100){
$sDato=trim(”.$sDato);
if (intval($nLun) < strlen($sDato)) { $sDato = substr($sDato, 0, $nLun); } if (strlen($sDato) > 0) {
$this->sEmailCheckEmail=$sDato;
if((preg_match(‘/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/’, $sDato)) ||
(preg_match(‘/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/’,$sDato))){
$aHost = explode(‘@’, $sDato);
if ($aHost!=”) {
if(checkdnsrr($aHost[1].’.’, ‘MX’) ) {
return $sDato;
}
if(checkdnsrr($aHost[1].’.’, ‘A’) ) {
return $sDato;
}
if(checkdnsrr($aHost[1].’.’, ‘CNAME’) ) {
return $sDato;
}
}
return “-2”;
}else{
return “-1″;
}
} // if (strlen($sDato) > 0) {
}

###################################
# verifica che sia una IP
function Ip($sDato){
$sDato=trim(”.$sDato);
if (strlen($sDato)>6) {
if (preg_match(“/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/”,$sDato) ) {
return $sDato;
}else{
return “”;
}
}
}

###################################
# verifica che sia un link http o mailto
function Link($sDato,$nLun=100){
$sDato=urlencode(trim(”.$sDato));
if (intval($nLun) < strlen($sDato)) { $sDato = substr($sDato, 0, $nLun); } echo $sDato;echo “da sistemare”; exit; if (strlen($sDato) > 0) {
if (!(substr($sDato, 0, 7)==”http://” || substr($sDato, 0, 8)==”https://”)) {
if (!substr($sDato, 0, 7)==”mailto:”) {
if (preg_match(“\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b”,$sDato) ) {
return “mailto:” . $sDato;
}else{
return “http://” . $sDato;
}
} // if (!substrr($sStringa, 7)=”mailto:”) {
} // if (!(substrr($sStringa, 7)=”http://” || substr($sStringa, 0, 8)==”https://”)) {
} // if (strlen($sStringa) > 0) {
}

###################################
# verifica che sia un numero
# mette . se da savare nel db al posto della virgola
# e se non è numero mette il default
function Numero($sDato,$sDefault=0,$bDb=true){
$sDato=trim(”.$sDato);
if ($bDb){
$sDato = str_replace(‘,’, ‘.’, $sDato);
}else{
$sDato = str_replace(‘.’, ‘,’, $sDato);
}
if (!is_numeric($sDato)) {
$sDato = $sDefault;
}
return $sDato;
}

###################################
# verifica che sia una partita iva valida
# restituisce un array con codice errore ed il dato
# Codici errore:
# -1: formato partita iva non corretto
# 0 : nessun errore
# >0: numero di cifre che mancano (min 11)
# >11:numero di cifre totali se superiore a 11 (max 11)
function PartitaIva($sDato){
$nLungMax=11;
$sDato = trim(”.$sDato);
$nLungDato=strlen($sDato);
if ($nLungDato<$nLungMax){ $nErrore = $nLungMax-$nLungDato; } else { if ($nLungDato>$nLungMax){
$nErrore = $nLungDato;
} else {
if (!is_numeric($sDato)) {
$nErrore = “-1”;
} else {
$nErrore = “0”;
}
}
}
return array($nErrore,$sDato);
}

###################################
# verifica che sia una stringa della lunghezza massima data
# ed aggiunge eventuali \ prima di salvarla nel db
function Stringa($sDato,$nLun,$bDb=true){
$sDato=trim(”.$sDato);
#if (get_magic_quotes_gpc()) {
# $sDato = stripslashes($sDato);
#}
if ( (int)$nLun < strlen($sDato) ) { $sDato = substr($sDato, 0, $nLun); } if (strlen($sDato) > 0) {
if (!is_numeric($sDato) && $bDb){
return (string)addslashes($sDato);
}else{
return (string)$sDato;
}
}
}

###################################
# verifica che sia una url
function Url($sDato,$nLun=100){
$sDato=trim(”.$sDato);
if (intval($nLun) < strlen($sDato)) { $sDato = substr($sDato, 0, $nLun); } if (strlen($sDato) > 0) {
#print_r(parse_url($sDato));
if (preg_match(“`^((http|https|ftp):\/\/)?”.
“(“.
“([A-Z0-9][A-Z0-9_-]*)?”.
“(\.[A-Z0-9][A-Z0-9_-]*)+”.
“)”.
“(\.[A-Z0-9]{2,6})”.
“(\/)?”.
“([A-Z0-9])?$`iU”,$sDato,$aUrl) ) {
// print_r($aUrl);
return $sDato;
}else{
return “”;
}
} // if (strlen($sStringa) > 0) {
}

function Telefono($sDato) {
// RESTITUISCE:
// -1 Dato accettabile;
// 0 Dato non accettabile: non formato correto, numero italiano;
// 1 Dato non accettabile: non formato correto, numero straniero;
// 2 Dato non accettabile: non formato correto, numero non riconosciuto;
//
//”\d\d (0[1-9]{1,3}|333|334|335|336|337|338|339|330″.
// “|360|368|340|347|348|349|320|328|329|380|388|389|392) [0-9]{5,7}”
$sCaratNonTel = array (‘-‘, ‘/’, ‘(‘, ‘)’, ‘ ‘);
$sDato = trim(str_replace($sCaratNonTel, ‘ ‘, $sDato));
$sCaratteriValidi = “0123456789 +”;
if (strlen($sDato)===strspn($sDato, $sCaratteriValidi)) {
//echo $sValore;
if ( (strpos($sDato, ‘+’) == 0 || strpos($sDato, ’00’) == 0)
&& strpos($sDato,’ ‘, 0) != -1 ) {
if ( (strpos($sDato, ’39’) == 1) || (strpos($sDato, ’39’) == 2) ) {
// Num italiano
$sRegola=”/^”;
$sRegola.=”(\+|00)39\s?”;
$sRegola.=”(0[1-9]{1,3}|330|333|334|335|336|337|338|339|”.
“360|363|366|368|340|343|346|347|348|349|”.
“320|323|328|329|380|383|388|389|390|391|392|393)”;
$sRegola.=”\s?[\s0-9]{5,10}”;
$sRegola.=”/”;
//echo $sRegola;
if (preg_match($sRegola, $sDato) ) {
return -1;
}else{
// Non correttamente formattato manca + e gli spazi
return 0;
}
}else{
// Num straniero
return -1;
}
}else{
// Num italiano senza prefisso internazionale
$sRegola=”/^”;
$sRegola.=”(0[1-9]{1,3}|330|333|334|335|336|337|338|339|”.
“360|363|366|368|340|343|346|347|348|349|”.
“320|323|328|329|380|383|388|389|390|391|392|393)”;
$sRegola.=”\s?[\s0-9]{5,10}”;
$sRegola.=”/”;
//echo $sRegola;
if (preg_match($sRegola, $sDato) ) {
return -1;
}else{
// Non correttamente formattato manca + e gli spazi
return 2;
}
}
}else{
return 1; // Caratteri non validi
}
}

}

[/crayon]