PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → Válida cnpj com outra abordagem de validação
Válida cnpj com outra abordagem de validação
Débuté par Boller, 16 mai 2023 02:23 - 2 réponses
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 16 mai 2023 - 02:23
Prezados,
Podemos criar uma procedure para validar um CNPJ usando WLanguage. Lembrando que um CNPJ válido tem 14 dígitos e possui um dígito verificador. Abaixo, segue um exemplo de como poderíamos fazer isso:

WLanguage
Copy code
//##############################
Procedure ValidateCNPJ(cnpj is string) Returns boolean

IF length (cnpj) <> 14 THEN
Result False
RETURN
END

iSum is int = 0
iRest is int

FOR i = 1 _TO_ 12
iSum += val(Middle (cnpj, 13 - i, 1)) * (2 + (i mod 8))
END

iRest = 11 - (iSum mod 11)
IF iRest = 10 OR iRest = 11 THEN iRest = 0

IF iRest <> val(Middle(cnpj, 13, 1)) THEN
Result False
RETURN
END

iSum = 0
FOR i = 1 _TO_ 13
iSum += val(Middle(cnpj, 14 - i, 1)) * (2 + (i mod 8))
END

iRest = 11 - (iSum mod 11)
IF iRest = 10 OR iRest = 11 THEN iRest = 0

IF iRest <> val(Middle(cnpj, 14, 1)) THEN
Result False
ELSE
Result True
END

//##############################
Neste exemplo, a procedure ValidateCNPJ recebe uma string cnpj como entrada e retorna um booleano indicando se o CNPJ é válido ou não. A validação é feita calculando os dígitos verificadores do CNPJ e comparando-os com os dígitos fornecidos. Se o CNPJ for válido, a procedure retorna True; caso contrário, retorna False.

Agora, você pode chamar essa procedure para validar um CNPJ da seguinte maneira:

WLanguage
Copy code
//##############################
IF ValidateCNPJ("11222333000181") THEN
Info("O CNPJ é válido.")
ELSE
Info("O CNPJ é inválido.")
END
//##############################
Espero que este exemplo ajude a entender a validação de CNPJ em WLanguage!


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 16 mai 2023 - 02:33
Membre enregistré
3 651 messages
Popularité : +175 (223 votes)
Posté le 16 mai 2023 - 02:26
Aqui está um exemplo de uma procedure que valida um CPF em WLanguage. Assim como o CNPJ, o CPF tem seus próprios critérios de validação, incluindo 11 dígitos e um dígito verificador.

WLanguage
Copy code
//##############################
Procedure ValidateCPF(cpf is string) Returns boolean

IF length (cpf) <> 11 THEN
Result False
RETURN
END

FOR i = 1 _TO_ 9
iSum1 += val(Middle(cpf, i, 1)) * (11 - i)
END

iRest1 = (iSum1 * 10) mod 11

IF iRest1 = 10 THEN iRest1 = 0

IF iRest1 <> val(Middle(cpf, 10, 1)) THEN
Result False
RETURN
END

FOR i = 1 _TO_ 10
iSum2 += val(Middle(cpf, i, 1)) * (12 - i)
END

iRest2 = (iSum2 * 10) mod 11

IF iRest2 = 10 THEN iRest2 = 0

IF iRest2 <> val(Middle(cpf, 11, 1)) THEN
Result False
ELSE
Result True
END
//##############################
Esta procedure, ValidateCPF, recebe uma string cpf como entrada e retorna um booleano indicando se o CPF é válido ou não. A validação é feita calculando os dígitos verificadores do CPF e comparando-os com os dígitos fornecidos. Se o CPF for válido, a procedure retorna True; caso contrário, retorna False.

Agora, você pode chamar essa procedure para validar um CPF da seguinte maneira:

WLanguage
Copy code
//##############################
IF ValidateCPF("12345678909") THEN
Info("O CPF é válido.")
ELSE
Info("O CPF é inválido.")
END
//##############################
Espero que este exemplo ajude a entender a validação de CPF em WLanguage! Lembre-se de substituir "12345678909" por um CPF real para testar a validação.


--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Message modifié, 16 mai 2023 - 02:35
Membre enregistré
203 messages
Popularité : +25 (25 votes)
Posté le 16 mai 2023 - 12:17
Procedure ValidaCNPJ(sCNPJ is string)
bOK is boolean
sX is string
nPosicao is int
nDV1C is int
nDV2C is int
nDV1F is int
nDV2F is int
sNum is string
sMu is string
nResto is int
sDV is string
//x$ = RTrim$(Retira$(St$, "./-,:", UM_A_UM))
sX = Replace(sCNPJ,".","")
sX = Replace(sX,"/","")
sX = Replace(sX,"-","")
sX = Replace(sX,",","")
sX = Replace(sX,":","")
sX = NoSpace(sX)

IF Length(sX) = 0 THEN
bOK = True
ELSE
bOK = False
END

IF Length(sX) = 14 THEN
nDV1F = Val(Middle(sX,13,1)) //salva os dígitos
nDV2F = Val(Right(sX,1)) //fornecidos
sNum = Left(sX,12) //separa o número
nDV1C = 0 //inicializa dv1 a calcular
sMu = "543298765432" //constante multiplicadora
nPosicao = 12 //inicializa posição

WHILE nPosicao > 0 //vamos correr de trás para a frente
nDV1C = nDV1C + Val(Middle(sNum, nPosicao, 1)) * Val(Middle(sMu, nPosicao, 1)) //acumulando cada dígido X o seu multiplicador
nPosicao = nPosicao - 1 //decrementa contador de posição
END

nResto = Modulo(nDV1C,11) //calcula o resto (módulo 11)
IF nResto < 2 THEN //se menor do que 2
nDV1C = 0 //o dv é 0
ELSE //senão
nDV1C = 11 - nResto //este dv é a diferença 11 - resto
END
sDV = Right(NumToString(nDV1C), 1) //salva o dv calculado como string
sNum = sNum + sDV //incorpora dv1
nDV2C = 0 //inicializa dv2
sMu = "6" + sMu //poe mais um dígito nos multiplicadores
nPosicao = 13 //posição agora inicia em 13


WHILE nPosicao > 0 //vamos fazer a mesma coisa,
nDV2C = nDV2C + Val(Middle(sNum, nPosicao, 1)) * Val(Middle(sMu, nPosicao, 1))
nPosicao = nPosicao -1 //que fizemos acima
END



nResto = Modulo(nDV2C,11) //pega o resto da divisão por 11
IF nResto < 2 THEN //se menor do que 2
nDV2C = 0 //o dv é 0
ELSE //senão
nDV2C = 11 - nResto //o dv é a diferença
END

bOK = (nDV1C = nDV1F) AND (nDV2C = nDV2F)
END


RESULT bOK


--
André Martini
IS2 https://www.is2.inf.br/ - https://www.is2.com.br/
YouTube

KW2MKT https://www.kw2mkt.com/
*Websites Desenvolvidos
https://www.educacaocaninars.com.br/