PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Valida CNPJ
Valida CNPJ
Débuté par adrianoboller, 18 nov. 2014 14:16 - 1 réponse
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 18 novembre 2014 - 14:16
Procedure ValidaCNPJ(cnpj is string)

//Limpa Campo
cnpj = LimpaCampo(cnpj)

// 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
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 22 juillet 2016 - 16:59
Correção do código:

Procedure ValidaCNPJ(cnpj is string)

//Limpa Campo
cnpj = LimpaCampo(cnpj)

// 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)) = Val(Resultado) THEN
RESULT(True)
ELSE
RESULT(False)
END


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