PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Procedure Validar Cnpj
Procedure Validar Cnpj
Débuté par amarildo, 26 fév. 2015 10:46 - 1 réponse
Membre enregistré
535 messages
Popularité : +14 (14 votes)
Posté le 26 février 2015 - 10:46
http://windevdesenvolvimento.blogspot.com.br/2015/02/matos-funcao-cnpj-validar.html

Aqui faco um video para fazer uma função cnpj validar e mostro no blog

IF matos_f_cnpj_validar(EDT_cnpj) = 1 THEN
STC_resultado="Cnpj Validado com Sucesso"
ELSE
STC_resultado="Cnpj Invalido"
END

// Summary: <retorna soma com pesos descendentes>
// Syntax:
//[ <Result> = ] matos_f_Soma_Com_Peso_Desc (<pNro> is string, <_MenorPeso> is int)
//
// Parameters:
//pNro (ANSI string): <número para calcular, em variavel String>
//_MenorPeso (int): <menor peso>
// Return Value:
// 2-byte unsigned int: // Peso total calculado
//
// For instance:
// Indicate an example.
//  SomaComPeso('111222333',2)
//  tmpPeso = 1*(9-1+2) + 1*(9-2+2) + 1*(9-3+2) + 2*(9-4+2) + 2*(9-5+2) + 2*(9-6+2)
// + 3*(9-7+2) + 3*(9-8+2) + 3*(9-9+2)
//  peso = 1*10 + 1*9 + 1*8 + 2*7 + 2*6 + 2*5 + 3*4 + 3*3 + 3*2
//  peso = 10 + 9 + 8 + 14 + 12 + 10 + 12 + 9 + 6
//  peso = 90
// Matos 26 02 2015
Procedure matos_f_Soma_Com_Peso_Desc(pNro is string, _MenorPeso is int)
_Tam is int  = Length(pNro)
_Peso is 2-byte unsigned int = 0

FOR i=1 TO _Tam
       _Peso = _Peso + (Asc(pNro[[i]]) -48)  * (_Tam-i+_MenorPeso)
END
RESULT _Peso


// Summary: retorna TRUE se o CPF está correto ou FALSE se está incorreto
// Syntax:
//[ <Result> = ] matos_f_cpf_validar (<pCPF> is string)
// Parameters:
//pCPF (ANSI string): <specify the role of pCPF>
// Return Value:
// boolean: // None
// For instance:
// Indicate an example.
//IF matos_f_cpf_validar(EDT_cpf) = 1 THEN
//STC_resultado="Cpf Validado com Sucesso"
//ELSE
//STC_resultado="Cpf Invalido"
//END
Procedure matos_f_cpf_validar(pCPF is string)
_CPFis string
_Peso is 2-byte unsigned int
_Resto is 1-byte int
_Digito is 1-byte int
FOR i=1 _TO_ Length(pCPF)
IF 47 < Asc(pCPF[[i]]) < 58 THEN
_CPF+=pCPF[[i]]
END
END
IF Length(_CPF) <> 11 THEN RESULT False
FOR i=1 TO 10
    _Peso = _Peso + (Asc(_CPF[[1 TO 10]][[i]]) -48)  * (10-i+2)
END
_Resto = Modulo(_Peso,11)
IF _Resto < 2 THEN
_Digito = 0
ELSE
_Digito = 11 - _Resto
END
//Trace(pCPF) // Trace Para Conferencia
//Trace("Val(tmpCPF[[11]])["+_CPF[[11]]+"]")
//Trace("tmpDigito9["+_Digito+"]")
IF Val(_CPF[[11]]) <> _Digito THEN
RESULT False
ELSE
RESULT True
END
Membre enregistré
535 messages
Popularité : +14 (14 votes)
Posté le 26 février 2015 - 10:48
Tinha colocado rotina do cpf acima e nao do cnpj agora vou colocar rotina do cnpj

// (c) Matos Informatica - 26 02 2015
//  Summary:  retorna TRUE se o CNPJ está correto ou FALSE se está incorreto
// Syntax:
//[ <Result> = ] matos_f_cnpj_validar (<pCNPJ> is string)
//
// Parameters:
//pCNPJ (ANSI string): número da inscrição CNPJ-MF
// Return Value:
// boolean: TRUE se o CNPJ está correto ou FALSE se está incorreto
// Matos 26 02 2015
Procedure matos_f_cnpj_validar(pCNPJ is string)
_CNPJ      is string
_Peso      is 2-byte unsigned int
_Resto     is 1-byte int
_Digito    is 1-byte int
FOR i=1 _TO_ Length(pCNPJ)
   IF 47 < Asc(pCNPJ[[i]]) < 58 THEN _CNPJ+=pCNPJ[[i]]
END
IF Length(_CNPJ) <> 14 THEN RESULT False
// calculo do primeiro digito verificador (posição 13)
_Peso  = matos_f_Soma_Com_Peso_Desc(_CNPJ[[1 TO 4]],2) ...
+ matos_f_Soma_Com_Peso_Desc(_CNPJ[[5 TO 12]],2)
_Resto = Modulo(_Peso,11)
IF _Resto < 2 THEN _Digito = 0 ELSE _Digito = 11 - _Resto
IF Asc(_CNPJ[[13]])-48 <> _Digito THEN RESULT False
// calculo do segundo digito verificador (posição 14)
_Peso  = matos_f_Soma_Com_Peso_Desc(_CNPJ[[1 TO 5]],2) ...
+ matos_f_Soma_Com_Peso_Desc(_CNPJ[[6 TO 13]],2) 
_Resto = Modulo(_Peso,11)
IF _Resto < 2 THEN _Digito = 0 ELSE _Digito = 11 - _Resto
IF Asc(_CNPJ[[14]])-48 <> _Digito THEN RESULT False ELSE RESULT True