Skip to content

Instantly share code, notes, and snippets.

@acfreitas
Last active March 7, 2024 13:54
Show Gist options
  • Save acfreitas/fb7465c33156ec144513 to your computer and use it in GitHub Desktop.
Save acfreitas/fb7465c33156ec144513 to your computer and use it in GitHub Desktop.
Gerador de CPF e CNPJ aleatório
/**
* Método para gerar CNPJ válido, com máscara ou não
* @example cnpjRandom(0)
* para retornar CNPJ sem máscar
* @param int $mascara
* @return string
*/
public static function cnpjRandom($mascara = "1") {
$n1 = rand(0, 9);
$n2 = rand(0, 9);
$n3 = rand(0, 9);
$n4 = rand(0, 9);
$n5 = rand(0, 9);
$n6 = rand(0, 9);
$n7 = rand(0, 9);
$n8 = rand(0, 9);
$n9 = 0;
$n10 = 0;
$n11 = 0;
$n12 = 1;
$d1 = $n12 * 2 + $n11 * 3 + $n10 * 4 + $n9 * 5 + $n8 * 6 + $n7 * 7 + $n6 * 8 + $n5 * 9 + $n4 * 2 + $n3 * 3 + $n2 * 4 + $n1 * 5;
$d1 = 11 - (self::mod($d1, 11) );
if ($d1 >= 10) {
$d1 = 0;
}
$d2 = $d1 * 2 + $n12 * 3 + $n11 * 4 + $n10 * 5 + $n9 * 6 + $n8 * 7 + $n7 * 8 + $n6 * 9 + $n5 * 2 + $n4 * 3 + $n3 * 4 + $n2 * 5 + $n1 * 6;
$d2 = 11 - (self::mod($d2, 11) );
if ($d2 >= 10) {
$d2 = 0;
}
$retorno = '';
if ($mascara == 1) {
$retorno = '' . $n1 . $n2 . "." . $n3 . $n4 . $n5 . "." . $n6 . $n7 . $n8 . "/" . $n9 . $n10 . $n11 . $n12 . "-" . $d1 . $d2;
} else {
$retorno = '' . $n1 . $n2 . $n3 . $n4 . $n5 . $n6 . $n7 . $n8 . $n9 . $n10 . $n11 . $n12 . $d1 . $d2;
}
return $retorno;
}
/**
* Método para gerar CPF válido, com máscara ou não
* @example cpfRandom(0)
* para retornar CPF sem máscar
* @param int $mascara
* @return string
*/
public static function cpfRandom($mascara = "1") {
$n1 = rand(0, 9);
$n2 = rand(0, 9);
$n3 = rand(0, 9);
$n4 = rand(0, 9);
$n5 = rand(0, 9);
$n6 = rand(0, 9);
$n7 = rand(0, 9);
$n8 = rand(0, 9);
$n9 = rand(0, 9);
$d1 = $n9 * 2 + $n8 * 3 + $n7 * 4 + $n6 * 5 + $n5 * 6 + $n4 * 7 + $n3 * 8 + $n2 * 9 + $n1 * 10;
$d1 = 11 - (self::mod($d1, 11) );
if ($d1 >= 10) {
$d1 = 0;
}
$d2 = $d1 * 2 + $n9 * 3 + $n8 * 4 + $n7 * 5 + $n6 * 6 + $n5 * 7 + $n4 * 8 + $n3 * 9 + $n2 * 10 + $n1 * 11;
$d2 = 11 - (self::mod($d2, 11) );
if ($d2 >= 10) {
$d2 = 0;
}
$retorno = '';
if ($mascara == 1) {
$retorno = '' . $n1 . $n2 . $n3 . "." . $n4 . $n5 . $n6 . "." . $n7 . $n8 . $n9 . "-" . $d1 . $d2;
} else {
$retorno = '' . $n1 . $n2 . $n3 . $n4 . $n5 . $n6 . $n7 . $n8 . $n9 . $d1 . $d2;
}
return $retorno;
}
/**
* @param type $dividendo
* @param type $divisor
* @return type
*/
private static function mod($dividendo, $divisor) {
return round($dividendo - (floor($dividendo / $divisor) * $divisor));
}
@insanff
Copy link

insanff commented Feb 8, 2021

Good ++

@tiago-pontomais
Copy link

valeu, testando agora.

@wesleydst404
Copy link

Obrigado! Facilitou minha vida hehe

@ivanlucci1
Copy link

Boa, valeu!! Só uma coisa, na função mod está forçando a tipagem no comentário acima dela, e na minha IDE (Visual Studio Code) estava apontando como erro. Exclui o cometário acima desta função e funciona perfeitamente.

@danilo00010
Copy link

Valeu meu querido ❤

@renatorcmidia
Copy link

Valeu! Muito obrigado.

@thiagopetherson
Copy link

Show de bola!

@luvittor
Copy link

luvittor commented Mar 7, 2024

estava dando um aviso com o método mod por causa do comentário com o tipo type que não existe.

eu corrigi

/**
 * Método para calcular o módulo de um número
 * @param int $dividendo
 * @param int $divisor
 * @return int
 */
private static function mod($dividendo, $divisor)
{
    return round($dividendo - (floor($dividendo / $divisor) * $divisor));
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment