quinta-feira, 8 de abril de 2021

Gerador e Validador de CPF em python3

 # Filename: cpf.py   Sintaxe: import cpf   Felipe Tanii 2021 04 09
def inf(): # informacoes sobre    
    print("CPF = 11 digitos, d1 ao d8 = Atr. Receita Federal, d9 nono digito = UF")
    print(" \
    0- RS                        \n\
    1- DF, GO, MS, MT, TO        \n\
    2- AC, AM, AP, PA, RO, RR    \n\
    3- CE, MA, PI                \n\
    4- AL, PB, PE, RN             \n\
    5- BA, SE                     \n\
    6- MG                        \n\
    7- ES, RJ                    \n\
    8- SP                        \n\
    9- PR, SC                     ")                
    print("Siglas:    \
    \nAC Acre                \nAL Alagoas                \nAP Amapá                \
    \nAM Amazonas            \nBA Bahia                    \nCE Ceará                \
    \nDF Distrito Federal    \nES Espírito Sant            \nGO Goiás                \
    \nMA Maranhão            \nMT Mato Grosso            \nMS Mato Grosso do Sul    \
    \nMG Minas Gerais        \nPA Pará                    \nPB Paraíba            \
    \nPR Paraná                \nPE Pernambuco                \nPI Piauí                \
    \nRJ Rio de Janeiro        \nRN Rio Grande do Norte    \nRS Rio Grande do Sul    \
    \nRO Rondônia            \nRR Roraima                \nSC Santa Catarina        \
    \nSP São Paulo            \nSE Sergipe                \nTO Tocantins            \
    \nDigitos verificadores = d10 e d11 ")

def val(cpf): # Validador de CPF pelo codigo verificador
    ''' val(str(11 digitos)), return "UF", "verificador", bool
    Error: print(erro)
    Sintaxe: cpf.val("12345678909") '''
    UF = ["RS", "DF, GO, MS, MT, TO", "AC, AM, AP, PA, RO, RR", "CE, MA, PI", "AL, PB, PE, RN", "BA, SE", "MG", "ES, RJ", "SP", "PR, SC"]
    d = cpf
    V, d10, d11 = "", 0, 0
    if d.isnumeric() and len(d) == 11:
        L = 10*int(d[0])+9*int(d[1])+8*int(d[2])+7*int(d[3])+6*int(d[4])+5*int(d[5])+4*int(d[6])+3*int(d[7])+2*int(d[8])
        c = L//11
        r = L%11
        if r == 0 or r == 1:
            d10 = 0
        else:
            d10 = 11 - r
            
        M = 10*int(d[1])+9*int(d[2])+8*int(d[3])+7*int(d[4])+6*int(d[5])+5*int(d[6])+4*int(d[7])+3*int(d[8])+2*d10
        c = M//11
        r = M%11
        if r == 0 or r == 1:
            d11 = 0
        else:
            d11 = 11 - r
                
        if str(d10) == d[9] and str(d11) == d[10]:
            V = True
        else:
            V = False
        return UF[int(d[8])], str(d10) + str(d11), V
    else:
        print("(ERRO): Digite os 11 numeros!")
        
def testVal():
    cpf = "12345678909"
    print(val(cpf)) # exemplo: 123 456 789 09
    return(val(cpf) == ('PR, SC', '09', True))
#print(testVal())

def gen(cpf): # Gerador de CPF (Digite qualquer numero de 9 digitos)
    ''' val(str(9 digitos)), return "UF", "CPF"
    Error: print(erro)
    Sintaxe: cpf.val("12345678909") '''
    UF = ["RS", "DF, GO, MS, MT, TO", "AC, AM, AP, PA, RO, RR", "CE, MA, PI", "AL, PB, PE, RN", "BA, SE", "MG", "ES, RJ", "SP", "PR, SC"]
    d = cpf
    d10, d11 = 0, 0
    if d.isnumeric() and len(d) == 9:
        L = 10*int(d[0])+9*int(d[1])+8*int(d[2])+7*int(d[3])+6*int(d[4])+5*int(d[5])+4*int(d[6])+3*int(d[7])+2*int(d[8])
        c = L//11
        r = L%11
        if r == 0 or r == 1:
            d10 = 0
        else:
            d10 = 11 - r
            
        M = 10*int(d[1])+9*int(d[2])+8*int(d[3])+7*int(d[4])+6*int(d[5])+5*int(d[6])+4*int(d[7])+3*int(d[8])+2*d10
        c = M//11
        r = M%11
        if r == 0 or r == 1:
            d11 = 0
        else:
            d11 = 11 - r
                
        return UF[int(d[8])], cpf + str(d10) + str(d11)
    else:
        print("(ERRO): Digite os 9 numeros!")
        
def testGen():
    cpf = "123456789"
    print(gen(cpf)) # exemplo: 280 012 389 38
    return(gen(cpf) == ('PR, SC', '12345678909'))
#print(testGen())

Nenhum comentário:

Postar um comentário