PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 25 → WX - Valida CPF e CNPJ
WX - Valida CPF e CNPJ
Iniciado por Boller, jun., 23 2021 4:43 PM - Sem resposta
Membro registado
3.319 mensagems
Popularité : +89 (91 votes)
Publicado em junho, 23 2021 - 4:43 PM
Valida CPF
Procedure ValidaCPF(sGCpf is string)

Cpf is string = sGCpf
Cpf = Replace(Cpf,".","")
Cpf = Replace(Cpf,"-","")

if length(Cpf) <> 11
Info("CPF Inválido")
end

// Caso coloque todos os numeros iguais
SWITCH Cpf
CASE "00000000000"
Cpf = ""
RESULT(False)
CASE "11111111111"
Cpf = ""
RESULT(False)
CASE "2222222222"
Cpf = ""
RESULT(False)
CASE "33333333333"
Cpf = ""
RESULT(False)
CASE "44444444444"
Cpf = ""
RESULT(False)
CASE "55555555555"
Cpf = ""
RESULT(False)
CASE "66666666666"
Cpf = ""
RESULT(False)
CASE "77777777777"
Cpf = ""
RESULT(False)
CASE "88888888888"
Cpf = ""
RESULT(False)
CASE "99999999999"
Cpf = ""
RESULT(False)
END


// calcula o primeiro digito
nSoma is int
nResto is int
nDigito_1, nDigito_2 is int

nSoma = (Val(Middle(Cpf,1,1)) * 10) + ...
(Val(Middle(Cpf,2,1)) * 09) + ...
(Val(Middle(Cpf,3,1)) * 08) + ...
(Val(Middle(Cpf,4,1)) * 07) + ...
(Val(Middle(Cpf,5,1)) * 06) + ...
(Val(Middle(Cpf,6,1)) * 05) + ...
(Val(Middle(Cpf,7,1)) * 04) + ...
(Val(Middle(Cpf,8,1)) * 03) + ...
(Val(Middle(Cpf,9,1)) * 02)

nResto = Modulo(nSoma, 11)

IF nResto = 0 OR nResto = 1 THEN
nDigito_1 = 0
ELSE
nDigito_1 = 11 - nResto
END

// calculoa o segundo dígito
nSoma = (Val(Middle(Cpf,01,1)) * 11) + ...
(Val(Middle(Cpf,02,1)) * 10) + ...
(Val(Middle(Cpf,03,1)) * 09) + ...
(Val(Middle(Cpf,04,1)) * 08) + ...
(Val(Middle(Cpf,05,1)) * 07) + ...
(Val(Middle(Cpf,06,1)) * 06) + ...
(Val(Middle(Cpf,07,1)) * 05) + ...
(Val(Middle(Cpf,08,1)) * 04) + ...
(Val(Middle(Cpf,09,1)) * 03) + ...
(Val(Middle(Cpf,10,1)) * 02)

nResto = Modulo(nSoma, 11)

IF nResto = 0 OR nResto = 1 THEN
nDigito_2 = 0
ELSE
nDigito_2 = 11 - nResto
END

sResultado is string

sResultado = NumToString(nDigito_1) + NumToString(nDigito_2)

//info(Val(Middle(cpf,10,2)) , Resultado)
//999.999.999-99

IF Val(Middle(Cpf,10,2)) = sResultado THEN
RESULT(True)
ELSE
RESULT(False)
END


Valida CNPJ
Procedure ValidaCNPJ(scnpj isstring)

//Limpa Campo
cnpj is string = scnpj
cnpj = Replace(cnpj ,".","")
cnpj = Replace(cnpj ,"-","")
cnpj = Replace(cnpj ,"/","")

if length(cnpj) <> 14
Info("CNPJ Inválido")
end

// Caso coloque todos os numeros iguais
SWITCH cnpj
CASE"00000000000000"
cnpj=""
CASE"11111111111111"
cnpj=""
CASE"22222222222222"
cnpj=""
CASE"333333333333333"
cnpj=""
CASE"444444444444444"
cnpj=""
CASE"555555555555555"
cnpj=""
CASE"666666666666666"
cnpj=""
CASE"777777777777777"
cnpj=""
CASE"888888888888888"
cnpj=""
CASE"999999999999999"
cnpj=""
END

// calcula o primeiro digito
LOC_num is int
LOC_num2 is int
LOC_num=(Val(Middle(cnpj,1,1)) *5) + ...
(Val(Middle(cnpj,2,1)) *4) + ...
(Val(Middle(cnpj,3,1)) *3) + ...
(Val(Middle(cnpj,4,1)) *2) + ...
(Val(Middle(cnpj,5,1)) *9) + ...
(Val(Middle(cnpj,6,1)) *8) + ...
(Val(Middle(cnpj,7,1)) *7) +...
(Val(Middle(cnpj,8,1)) *6) + ...
(Val(Middle(cnpj,9,1)) *5) + ...
(Val(Middle(cnpj,10,1)) *4) + ...
(Val(Middle(cnpj,11,1)) *3) + ...
(Val(Middle(cnpj,12,1)) *2)


LOC_num=Modulo(LOC_num,11)
IF LOC_num<2 THEN
LOC_num=0
ELSE
LOC_num=11-LOC_num
END

// calculoa o segundo dígito
LOC_num2= (Val(Middle(cnpj,1,1)) *6) + ...
(Val(Middle(cnpj,2,1)) *5) + ...
(Val(Middle(cnpj,3,1)) *4) + ...
(Val(Middle(cnpj,4,1)) *3) + ...
(Val(Middle(cnpj,5,1)) *2) + ...
(Val(Middle(cnpj,6,1)) *9) + ...
(Val(Middle(cnpj,7,1)) *8) + ...
(Val(Middle(cnpj,8,1)) *7) + ...
(Val(Middle(cnpj,9,1)) *6) + ...
(Val(Middle(cnpj,10,1)) *5) + ...
(Val(Middle(cnpj,11,1)) *4) + ...
(Val(Middle(cnpj,12,1)) *3) + ...
(LOC_num) *2


LOC_num2=Modulo(LOC_num2,11)
IF LOC_num2<2 THEN
LOC_num2=0
ELSE
LOC_num2=11-LOC_num2
END

Resultado is string

Resultado=NumToString(LOC_num) +NumToString(LOC_num2)

//99.999.999/0001-00 = 99999999000000
IF Val(Middle(cnpj,13,2)) =Resultado THEN
RESULT(True)
ELSE
RESULT(False)
END


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/