Checagem de Inscrição Estadual

Pessoal, estava organizando os meus arquivos e encontrei uma rotina para checagem do número de Inscrição Estadual dos estados.

Não sei a autoria. Também não testei, mas pode ser útil ara alguém.

<?

//Acre
function CheckIEAC($ie){
	if (strlen($ie) != 13){return 0;}
	else{
		if(substr($ie, 0, 2) != '01'){return 0;}
		else{
			$b = 4;
			$soma = 0;
			for ($i=0;$i<=10;$i++){
				$soma += $ie[$i] * $b;
				$b--;
				if($b == 1){$b = 9;}
			}
			$dig = 11 - ($soma % 11);
			if($dig >= 10){$dig = 0;}
			if( !($dig == $ie[11]) ){return 0;}
			else{
				$b = 5;
				$soma = 0;
				for($i=0;$i<=11;$i++){
					$soma += $ie[$i] * $b;
					$b--;
					if($b == 1){$b = 9;}
				}
				$dig = 11 - ($soma % 11);
				if($dig >= 10){$dig = 0;}

				return ($dig == $ie[12]);
			}
		}
	}
}

// Alagoas
function CheckIEAL($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		if(substr($ie, 0, 2) != '24'){return 0;}
		else{
			$b = 9;
			$soma = 0;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b--;
			}
			$soma *= 10;
			$dig = $soma - ( ( (int)($soma / 11) ) * 11 );
			if($dig == 10){$dig = 0;}

			return ($dig == $ie[8]);
		}
	}
}

//Amazonas
function CheckIEAM($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$b = 9;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		if($soma <= 11){$dig = 11 - $soma;}
		else{
			$r = $soma % 11;
			if($r <= 1){$dig = 0;}
			else{$dig = 11 - $r;}
		}

		return ($dig == $ie[8]);
	}
}

//Amapá
function CheckIEAP($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		if(substr($ie, 0, 2) != '03'){return 0;}
		else{
			$i = substr($ie, 0, -1);
			if( ($i >= 3000001) && ($i <= 3017000) ){$p = 5; $d = 0;}
			elseif( ($i >= 3017001) && ($i <= 3019022) ){$p = 9; $d = 1;}
			elseif ($i >= 3019023){$p = 0; $d = 0;}

			$b = 9;
			$soma = $p;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b--;
			}
			$dig = 11 - ($soma % 11);
			if($dig == 10){$dig = 0;}
			elseif($dig == 11){$dig = $d;}

			return ($dig == $ie[8]);
		}
	}
}

//Bahia
function CheckIEBA($ie){
	if (strlen($ie) != 8){return 0;}
	else{

		$arr1 = array('0','1','2','3','4','5','8');
		$arr2 = array('6','7','9');

		$i = substr($ie, 0, 1);

		if(in_array($i, $arr1)){$modulo = 10;}
		elseif(in_array($i, $arr2)){$modulo = 11;}

		$b = 7;
		$soma = 0;
		for($i=0;$i<=5;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}

		$i = $soma % $modulo;
		if ($modulo == 10){
			if ($i == 0) { $dig = 0; } else { $dig = $modulo - $i; }
		}else{
			if ($i <= 1) { $dig = 0; } else { $dig = $modulo - $i; }
		}
		if( !($dig == $ie[7]) ){return 0;}
		else{
			$b = 8;
			$soma = 0;
			for($i=0;$i<=5;$i++){
				$soma += $ie[$i] * $b;
				$b--;
			}
			$soma += $ie[7] * 2;
			$i = $soma % $modulo;
			if ($modulo == 10){
				if ($i == 0) { $dig = 0; } else { $dig = $modulo - $i; }
			}else{
				if ($i <= 1) { $dig = 0; } else { $dig = $modulo - $i; }
			}

			return ($dig == $ie[6]);
		}
	}
}

//Ceará
function CheckIECE($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$b = 9;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$dig = 11 - ($soma % 11);

		if ($dig >= 10){$dig = 0;}

		return ($dig == $ie[8]);
	}
}

// Distrito Federal
function CheckIEDF($ie){
	if (strlen($ie) != 13){return 0;}
	else{
		if( substr($ie, 0, 2) != '07' ){return 0;}
		else{
			$b = 4;
			$soma = 0;
			for ($i=0;$i<=10;$i++){
				$soma += $ie[$i] * $b;
				$b--;
				if($b == 1){$b = 9;}
			}
			$dig = 11 - ($soma % 11);
			if($dig >= 10){$dig = 0;}

			if( !($dig == $ie[11]) ){return 0;}
			else{
				$b = 5;
				$soma = 0;
				for($i=0;$i<=11;$i++){
					$soma += $ie[$i] * $b;
					$b--;
					if($b == 1){$b = 9;}
				}
				$dig = 11 - ($soma % 11);
				if($dig >= 10){$dig = 0;}

				return ($dig == $ie[12]);
			}
		}
	}
}

//Espirito Santo
function CheckIEES($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$b = 9;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$i = $soma % 11;
		if ($i < 2){$dig = 0;}
		else{$dig = 11 - $i;}

		return ($dig == $ie[8]);
	}
}

//Goias
function CheckIEGO($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$s = substr($ie, 0, 2);

		if( !( ($s == 10) || ($s == 11) || ($s == 15) ) ){return 0;}
		else{
			$n = substr($ie, 0, 7);

			if($n == 11094402){
				if($ie[8] != 0){
					if($ie[8] != 1){
						return 0;
					}else{return 1;}
				}else{return 1;}
			}else{
				$b = 9;
				$soma = 0;
				for($i=0;$i<=7;$i++){
					$soma += $ie[$i] * $b;
					$b--;
				}
				$i = $soma % 11;
				if ($i == 0){$dig = 0;}
				else{
					if($i == 1){
						if(($n >= 10103105) && ($n <= 10119997)){$dig = 1;}
						else{$dig = 0;}
					}else{$dig = 11 - $i;}
				}

				return ($dig == $ie[8]);
			}
		}
	}
}

// Maranhão
function CheckIEMA($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		if(substr($ie, 0, 2) != 12){return 0;}
		else{
			$b = 9;
			$soma = 0;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b--;
			}
			$i = $soma % 11;
			if ($i <= 1){$dig = 0;}
			else{$dig = 11 - $i;}

			return ($dig == $ie[8]);
		}
	}
}

// Mato Grosso
function CheckIEMT($ie){
	if (strlen($ie) != 11){return 0;}
	else{
		$b = 3;
		$soma = 0;
		for($i=0;$i<=9;$i++){
			$soma += $ie[$i] * $b;
			$b--;
			if($b == 1){$b = 9;}
		}
		$i = $soma % 11;
		if ($i <= 1){$dig = 0;}
		else{$dig = 11 - $i;}

		return ($dig == $ie[10]);
	}
}

// Mato Grosso do Sul
function CheckIEMS($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		if(substr($ie, 0, 2) != 28){return 0;}
		else{
			$b = 9;
			$soma = 0;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b--;
			}
			$i = $soma % 11;
			if ($i == 0){$dig = 0;}
			else{$dig = 11 - $i;}

			if($dig > 9){$dig = 0;}

			return ($dig == $ie[8]);
		}
	}
}

//Minas Gerais
function CheckIEMG($ie){
	if (strlen($ie) != 13){return 0;}
	else{
		$ie2 = substr($ie, 0, 3) . '0' . substr($ie, 3);

		$b = 1;
		$soma = "";
		for($i=0;$i<=11;$i++){
			$soma .= $ie2[$i] * $b;
			$b++;
			if($b == 3){$b = 1;}
		}
		$s = 0;
		for($i=0;$i<strlen($soma);$i++){
			$s += $soma[$i];
		}
		$i = substr($ie2, 9, 2);
		$dig = $i - $s;
		if($dig != $ie[11]){return 0;}
		else{
			$b = 3;
			$soma = 0;
			for($i=0;$i<=11;$i++){
				$soma += $ie[$i] * $b;
				$b--;
				if($b == 1){$b = 11;}
			}
			$i = $soma % 11;
			if($i < 2){$dig = 0;}
			else{$dig = 11 - $i;};

			return ($dig == $ie[12]);
		}
	}
}

//Pará
function CheckIEPA($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		if(substr($ie, 0, 2) != 15){return 0;}
		else{
			$b = 9;
			$soma = 0;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b--;
			}
			$i = $soma % 11;
			if ($i <= 1){$dig = 0;}
			else{$dig = 11 - $i;}

			return ($dig == $ie[8]);
		}
	}
}

//Paraíba
function CheckIEPB($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$b = 9;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$i = $soma % 11;
		if ($i <= 1){$dig = 0;}
		else{$dig = 11 - $i;}

		if($dig > 9){$dig = 0;}

		return ($dig == $ie[8]);
	}
}

//Paraná
function CheckIEPR($ie){
	if (strlen($ie) != 10){return 0;}
	else{
		$b = 3;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
			if($b == 1){$b = 7;}
		}
		$i = $soma % 11;
		if ($i <= 1){$dig = 0;}
		else{$dig = 11 - $i;}

		if ( !($dig == $ie[8]) ){return 0;}
		else{
			$b = 4;
			$soma = 0;
			for($i=0;$i<=8;$i++){
				$soma += $ie[$i] * $b;
				$b--;
				if($b == 1){$b = 7;}
			}
			$i = $soma % 11;
			if($i <= 1){$dig = 0;}
			else{$dig = 11 - $i;}

			return ($dig == $ie[9]);
		}
	}
}

//Pernambuco
function CheckIEPE($ie){
	if (strlen($ie) == 9){
		$b = 8;
		$soma = 0;
		for($i=0;$i<=6;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$i = $soma % 11;
		if ($i <= 1){$dig = 0;}
		else{$dig = 11 - $i;}

		if ( !($dig == $ie[7]) ){return 0;}
		else{
			$b = 9;
			$soma = 0;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b--;
			}
			$i = $soma % 11;
			if ($i <= 1){$dig = 0;}
			else{$dig = 11 - $i;}

			return ($dig == $ie[8]);
		}
	}
	elseif(strlen($ie) == 14){
		$b = 5;
		$soma = 0;
		for($i=0;$i<=12;$i++){
			$soma += $ie[$i] * $b;
			$b--;
			if($b == 0){$b = 9;}
		}
		$dig = 11 - ($soma % 11);
		if($dig > 9){$dig = $dig - 10;}

		return ($dig == $ie[13]);
	}
	else{return 0;}
}

//Piauí
function CheckIEPI($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$b = 9;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$i = $soma % 11;
		if($i <= 1){$dig = 0;}
		else{$dig = 11 - $i;}
		if($dig >= 10){$dig = 0;}

		return ($dig == $ie[8]);
	}
}

// Rio de Janeiro
function CheckIERJ($ie){
	if (strlen($ie) != 8){return 0;}
	else{
		$b = 2;
		$soma = 0;
		for($i=0;$i<=6;$i++){
			$soma += $ie[$i] * $b;
			$b--;
			if($b == 1){$b = 7;}
		}
		$i = $soma % 11;
		if ($i <= 1){$dig = 0;}
		else{$dig = 11 - $i;}

		return ($dig == $ie[7]);
	}
}

//Rio Grande do Norte
function CheckIERN($ie){
	if( !( (strlen($ie) == 9) || (strlen($ie) == 10) ) ){return 0;}
	else{
		$b = strlen($ie);
		if($b == 9){$s = 7;}
		else{$s = 8;}
		$soma = 0;
		for($i=0;$i<=$s;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$soma *= 10;
		$dig = $soma % 11;
		if($dig == 10){$dig = 0;}

		$s += 1;
		return ($dig == $ie[$s]);
	}
}

// Rio Grande do Sul
function CheckIERS($ie){
	if (strlen($ie) != 10){return 0;}
	else{
		$b = 2;
		$soma = 0;
		for($i=0;$i<=8;$i++){
			$soma += $ie[$i] * $b;
			$b--;
			if ($b == 1){$b = 9;}
		}
		$dig = 11 - ($soma % 11);
		if($dig >= 10){$dig = 0;}

		return ($dig == $ie[9]);
	}
}

// Rondônia
function CheckIERO($ie){
	if (strlen($ie) == 9){
		$b=6;
		$soma =0;
		for($i=3;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$dig = 11 - ($soma % 11);
		if($dig >= 10){$dig = $dig - 10;}

		return ($dig == $ie[8]);
	}
	elseif(strlen($ie) == 14){
		$b=6;
		$soma=0;
		for($i=0;$i<=12;$i++) {
			$soma += $ie[$i] * $b;
			$b--;
			if($b == 1){$b = 9;}
		}
		$dig = 11 - ( $soma % 11);
		if ($dig > 9){$dig = $dig - 10;}

		return ($dig == $ie[13]);
	}
	else{return 0;}
}

//Roraima
function CheckIERR($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		if(substr($ie, 0, 2) != 24){return 0;}
		else{
			$b = 1;
			$soma = 0;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b++;
			}
			$dig = $soma % 9;

			return ($dig == $ie[8]);
		}
	}
}

//Santa Catarina
function CheckIESC($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$b = 9;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$dig = 11 - ($soma % 11);
		if ($dig <= 1){$dig = 0;}

		return ($dig == $ie[8]);
	}
}

//São Paulo
function CheckIESP($ie){
	if( strtoupper( substr($ie, 0, 1) )  == 'P' ){
		if (strlen($ie) != 13){return 0;}
		else{
			$b = 1;
			$soma = 0;
			for($i=1;$i<=8;$i++){
				$soma += $ie[$i] * $b;
				$b++;
				if($b == 2){$b = 3;}
				if($b == 9){$b = 10;}
			}
			$dig = $soma % 11;
			return ($dig == $ie[9]);
		}
	}else{
		if (strlen($ie) != 12){return 0;}
		else{
			$b = 1;
			$soma = 0;
			for($i=0;$i<=7;$i++){
				$soma += $ie[$i] * $b;
				$b++;
				if($b == 2){$b = 3;}
				if($b == 9){$b = 10;}
			}
			$dig = $soma % 11;
			if($dig > 9){$dig = 0;}

			if($dig != $ie[8]){return 0;}
			else{
				$b = 3;
				$soma = 0;
				for($i=0;$i<=10;$i++){
					$soma += $ie[$i] * $b;
					$b--;
					if($b == 1){$b = 10;}
				}
				$dig = $soma % 11;

				return ($dig == $ie[11]);
			}
		}
	}
}

//Sergipe
function CheckIESE($ie){
	if (strlen($ie) != 9){return 0;}
	else{
		$b = 9;
		$soma = 0;
		for($i=0;$i<=7;$i++){
			$soma += $ie[$i] * $b;
			$b--;
		}
		$dig = 11 - ($soma % 11);
		if ($dig > 9){$dig = 0;}

		return ($dig == $ie[8]);
	}
}

//Tocantins
function CheckIETO($ie){
	if (strlen($ie) != 11){return 0;}
	else{
		$s = substr($ie, 2, 2);
		if( !( ($s=='01') || ($s=='02') || ($s=='03') || ($s=='99') ) ){return 0;}
		else{
			$b=9;
			$soma=0;
			for($i=0;$i<=9;$i++){
				if( !(($i == 2) || ($i == 3)) ){
					$soma += $ie[$i] * $b;
					$b--;
				}
			}
			$i = $soma % 11;
			if($i < 2){$dig = 0;}
			else{$dig = 11 - $i;}

			return ($dig == $ie[10]);
		 }
	}
}

function CheckIE($ie, $uf){
	if( strtoupper($ie) == 'ISENTO' ){return 1;}
	else{
		$uf = strtoupper($uf);
		$ie = ereg_replace("[()-./,:]", "", $ie);
		$comando = '$valida = CheckIE'.$uf.'("'.$ie.'");';
		eval($comando);
		return $valida;
	}
}

//números para testes
//01.004.823/001-12 AC
//240000048 AL
//030123459 AP
//999999990 AM
//123456-63 BA
//06000001-5 CE
//073.00001.001-09 DF
//999999990 ES
//10.987.654-7 GO
//120000385 MA
//0013000001-9 MT
//283115947 MS
//062.307.904/0081 MG
//15-999999-5 PA
//06000001-5 PB
//123.45678-50 PR
//0321418-40 PE
//18.1.001.0000004-9 PE
//012345679 PI
//99999993 RJ
//20.040.040-1 RN
//20.0.040.040-0 RN
//224/3658792 RS
//101.62521-3 RO
//0000000062521-3 RO
//24006628-1 RR
//251.040.852 SC
//110.042.490.114 SP
//27123456-3 SE
//29010227836 TO

?>

Bom proveito.

Obrigado por compartilhar Jorge

Acho que o Autor é o mestre fyoda: http://www.scriptbrasil.com.br/forum/topic/85770-validação-de-inscrição-estadual/
Eu conhecia este aqui: https://mateusmachado.wordpress.com/2008/09/08/validacao-de-inscricao-estadual-em-php/