Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fernando Nito

Validador de CPF/CNPJ no mesmo input

Recommended Posts

Baseado nos scripts de validação de CPF e validação de CNPJ do grande Fabyo, criei esse simples script, unindo as duas funções de validação no mesmo input, independente do usuario digitar os dados de CPF ou CNPJ com ponto, traço ou barra.

O script que realiza a checagem e mostra o resultado está comentado e de fácil entendimento e acredito que não haverá dúvidas http://forum.imasters.com.br/public/style_emoticons/default/graduated.gif

Quem quiser entender o algoritmo do CPF clique aqui e para entender o algoritmo do CNPJ clique aqui.

 

 

index.html

<html> 
<head> 
      <title>Validador de CPF/CNPJ</title> 
</head> 
<body> 
<form action="validar.php" method="POST">
  Digite o CPF ou CNPJ: 
  <input type="text" name="cpfcnpj">
  <br>
  <input type="submit" value="Enviar dados!" >
</form> 
</body> 
</html>

 

 

cpfcnpj.php

<?php

/*
Ambas as funções foram criadas pelo Fabyo, membro do fórum do iMasters:
http-~~-//forum.imasters.com.br/index.php?/user/13485-fabyo/

Valida CPF versao 1.2
http-~~-//forum.imasters.com.br/index.php?/topic/142542-valida-cpf-versao-1-2/

Valida CNPJ
http-~~-//forum.imasters.com.br/index.php?/topic/141154-valida-cnpj/
*/

function valida_cpf($cpf){ 
for( $i = 0; $i < 10; $i++ ){ 
       if ( $cpf ==  str_repeat( $i , 11) or !preg_match("@^[0-9]{11}$@", $cpf ) or $cpf == "12345678909" )			return false;                
		if ( $i < 9 ) $soma[]  = $cpf{$i} * ( 10 - $i ); 
               $soma2[] = $cpf{$i} * ( 11 - $i );                       
} 

if(((array_sum($soma)% 11) < 2 ? 0 : 11 - ( array_sum($soma)  % 11 )) != $cpf{9})return false; 
	return ((( array_sum($soma2)% 11 ) < 2 ? 0 : 11 - ( array_sum($soma2) % 11 )) != $cpf{10}) ? false : true; 
}

function valida_cnpj( $cnpj ) {
if( strlen( $cnpj ) <> 14 or !is_numeric( $cnpj ) ){
	return false;
}

$k = 6;
$soma1 = "";
$soma2 = "";

for( $i = 0; $i < 13; $i++ ){
	$k = $k == 1 ? 9 : $k;
	$soma2 += ( $cnpj{$i} * $k );
	$k--;

	if($i < 12) {
		if($k == 1) {
			$k = 9;
			$soma1 += ( $cnpj{$i} * $k );
			$k = 1;
		} else {
			$soma1 += ( $cnpj{$i} * $k );
		}
	}
}

$digito1 = $soma1 % 11 < 2 ? 0 : 11 - $soma1 % 11;
$digito2 = $soma2 % 11 < 2 ? 0 : 11 - $soma2 % 11;

return ( $cnpj{12} == $digito1 and $cnpj{13} == $digito2 );
}

?>

 

 

 

 

 

validar.php

<?php

//Puxamos os dados digitados no input
$cpfcnpj = $_POST["cpfcnpj"];

//Retiramos os pontos, traços e barras
$cpfcnpj2 = preg_replace( "@[./-]@", "", $cpfcnpj );

/*Contamos quantos caracteres sobrou, digitados no input.
Se tiver 14 caracteres é um CNPJ;
Se tiver 11 caracteres é um CPF;
Se não tiver exatos 14 ou 11 caracteres, o usuario digitou coisa a mais ou a menos.
*/
$caracteres = strlen($cpfcnpj2);

//Chamamos o arquivo cpfcnpj.php para utilizar as funções valida_cnpj ou valida_cpf
include('cpfcnpj.php');

if ($caracteres==14) {
$cnpjverificado = valida_cnpj($cpfcnpj2);
if ($cnpjverificado==1) {
	echo "CNPJ valido" ;
} else {
	echo "CNPJ invalido" ;
}
} else {
if ($caracteres==11) {
	$cpfverificado = valida_cpf($cpfcnpj2);
	if ($cpfverificado==1) {
		echo "CPF valido" ;
	} else {
	echo "CPF invalido" ;
	}
} else {
	echo "Digite corretamente o CPF/CNPJ" ;
}
}

?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Durante a identação, acabei apagando sem querer o ponto e vírgula na linha 34 do cpfcnpj.php

$soma1 += ( $cnpj{$i} * $k );

 

E acabei digitando errado o nome do segundo arquivo, é cpfcnpj.php e não cpjcnpj.php

 

Se algum moderador puder editar, agradeço http://forum.imasters.com.br/public/style_emoticons/default/innocent.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

editado conforme orientações

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.