Skip to content

Instantly share code, notes, and snippets.

@lucascnr
Created November 18, 2016 19:36
Show Gist options
  • Save lucascnr/24c70409908a31ad253f97f9dd4c6b7c to your computer and use it in GitHub Desktop.
Save lucascnr/24c70409908a31ad253f97f9dd4c6b7c to your computer and use it in GitHub Desktop.
Gerador de CPF e CNPJ em Python
def generate_cpf(self):
cpf = [random.randint(0, 9) for x in range(9)]
for _ in range(2):
val = sum([(len(cpf) + 1 - i) * v for i, v in enumerate(cpf)]) % 11
cpf.append(11 - val if val > 1 else 0)
return '%s%s%s.%s%s%s.%s%s%s-%s%s' % tuple(cpf)
def generate_cnpj(self):
def calculate_special_digit(l):
digit = 0
for i, v in enumerate(l):
digit += v * (i % 8 + 2)
digit = 11 - digit % 11
return digit if digit < 10 else 0
cnpj = [1, 0, 0, 0] + [random.randint(0, 9) for x in range(8)]
for _ in range(2):
cnpj = [calculate_special_digit(cnpj)] + cnpj
return '%s%s.%s%s%s.%s%s%s/%s%s%s%s-%s%s' % tuple(cnpj[::-1])
@ngbrito
Copy link

ngbrito commented Aug 10, 2021

Muito obrigado. Ajudou bastante aqui nos testes

@gnstrg
Copy link

gnstrg commented Oct 23, 2021

muito obrigado, me ajudo demais

@rdemetrescu
Copy link

@lucascnr usei teu código como base e dei uma simplificada nele :)

import random

def generate_cpf():
    cpf = [random.randrange(10) for _ in range(9)]

    for _ in range(2):
        value = sum([(len(cpf) + 1 - i) * v for i, v in enumerate(cpf)]) % 11
        cpf.append(11 - value if value > 1 else 0)

    return "".join(str(x) for x in cpf)


def generate_cnpj():
    cnpj = [random.randrange(10) for _ in range(8)] + [0, 0, 0, 1]

    for _ in range(2):
        value = sum(v * (i % 8 + 2) for i, v in enumerate(reversed(cnpj)))
        digit = 11 - value % 11
        cnpj.append(digit if digit < 10 else 0)

    return "".join(str(x) for x in cnpj)

@jtiagobsouza
Copy link

ele gera um cpf que não é valido

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