Gerador de CPF em Python
Publicado por danilo (última atualização em 30/11/2012)
[ Hits: 17.708 ]
Homepage: www.vivaolinux.com.br
Função que gera um número válido de CPF.
#!/usr/bin/env python # -*- coding: utf-8 -*- import string from random import randint ''' * Essa função gera um número de CPF válido. * @param {Boolean} formatar define se o número do CPF deve ser gerado com os pontos e hífen. * @return {String} CPF * * Regra de Formação * * O número de um CPF tem exatamente 9 algarismos em sua raiz e mais dois dígitos verificadores que são indicados por último. * Portanto, um CPF tem 11 algarismos. O número do CPF é escrito na forma abcdefghi-jk ou diretamente como abcdefghijk onde * os algarismos não podem ser todos iguais entre si. * * abc.def.ghi-jk * * O j é chamado 1° dígito verificador do número do CPF. * * O k é chamado 2° dígito verificador do número do CPF. * * Primeiro Dígito * * Para obter j multiplicamos a, b, c, d, e, f, g, h e i pelas constantes correspondentes, e somamos os resultados de cada multiplicação: * * S = 10a + 9b + 8c + 7d + 6e + 5f + 4g + 3h + 2i * * O resultado da soma é dividido por 11, e resto da divisão é tratada da seguinte forma: * * se o resto for igual a 0 ou 1, j será 0 (zero) * se o resto for 2, 3, 4, 5, 6, 7, 8, 9 ou 10, j será 11 - resto * * Para obter k, multiplicamos a, b, c, d, e, f, g, h, i e j pelas constantes correspondentes, e somamos os resultados de cada multiplicação: * * S = 11a + 10b + 9c + 8d + 7e + 6f + 5g + 4h + 3i + 2j * * O resultado da soma é dividido por 11, e resto da divisão é tratada da seguinte forma: * * se o resto for igual a 0 ou 1, k será 0 (zero) * se o resto for 2, 3, 4, 5, 6, 7, 8, 9 ou 10, k será 11 - resto * ''' def geradorDeCpf( formatar ): # 9 números aleatórios arNumeros = [] for i in range(9): arNumeros.append( randint(0,9) ) # Calculado o primeiro DV somaJ = ( arNumeros[0] * 10 ) + ( arNumeros[1] * 9 ) + ( arNumeros[2] * 8 ) + ( arNumeros[3] * 7 ) + ( arNumeros[4] * 6 ) + ( arNumeros[5] * 5 ) + ( arNumeros[6] * 4 ) + ( arNumeros[7] * 3 ) + ( arNumeros[8] * 2 ) restoJ = somaJ % 11 if ( restoJ == 0 or restoJ == 1 ): j = 0 else: j = 11 - restoJ arNumeros.append( j ) # Calculado o segundo DV somaK = ( arNumeros[0] * 11 ) + ( arNumeros[1] * 10 ) + ( arNumeros[2] * 9 ) + ( arNumeros[3] * 8 ) + ( arNumeros[4] * 7 ) + ( arNumeros[5] * 6 ) + ( arNumeros[6] * 5 ) + ( arNumeros[7] * 4 ) + ( arNumeros[8] * 3 ) + ( j * 2 ) restoK = somaK % 11 if ( restoK == 0 or restoK == 1 ): k = 0 else: k = 11 - restoK arNumeros.append( k ) cpf = ''.join(str(x) for x in arNumeros) if formatar: return cpf[ :3 ] + '.' + cpf[ 3:6 ] + '.' + cpf[ 6:9 ] + '-' + cpf[ 9: ] else: return cpf
Conversor de dólares em reais e vice-versa
Calculadora de area de poligonos e circulos
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta