estação zn_ validação de cpf e cnpj com javascript - delphi_intraweb

21
quarta‐feira, 15 de abril de 2009 Validação de CPF e CNPJ com Javascript ‐ Delphi/Intraweb por GMotta ZN Mais um da série ... (da séria série ...) Ok, já fizemos vários artigos sobre como usar Javascript no Intraweb. Tenho gastado tempo registrando essa abordagem por vários motivos: Um deles é (uma tecla que venho batendo bastante) a importância de buscar um equilíbrio, distribuído responsabilidades entre client‐side e server‐side (obviamente, me refiro ao contexto restrito os sistemas desenvolvidos para plataforma web). Um segundo motivo pode ser: “Como fazer isso, se eu uso Delphi/Intraweb?” Na medida em que essa é uma questão que considero possuir alguma relevância. Outro motivo, porem, trata sobre “Qual implicação, ou quais implicações, terei ao percorrer este caminho?” Tenho procurado, nos assuntos abordados, trazer alguns elementos que apontem para a responder a essa questão. Justamente, esse último ponto, sobre as implicações, ou seja, falar sobre algumas vantagens e desvantagens, é um dos objetivos desse texto. No Intraweb existem certas particularidades ao se aplicar o Javascript, uma delas é o evento “onSubmit” do form definido numa página web. Veremos, então, sobre isso mais adiante. Neste artigo pretendo mostrar também como podemos usar a passagem por parâmetro, de uma função Javascript, para a referência de um objeto “html” de um form no Intraweb. Seguindo a metodologia de ir do mais simples para o mais complexo, iniciaremos nossa parte prática com a criação de uma função para validação no lado cliente. Validação essa para a qual atribuiremos a responsabilidade de exemplificar esse uso de parâmetros, ao qual me referi, em Javascript, relacionado aos objetos Intraweb. Quero usar um exemplo que seja prático, ordinário, para um cenário de sistemas de informação. Portanto, vamos criar uma função para validar CPF, uma outra para validar CNPJ e uma terceira função que vai opcionalmente validar CNPJ, CPF, ou os dois simultaneamente. Desta forma teremos uma função polivalente (a qual servirá para Groove ZN ‐ by Grooveshark RSS Feed 0 mais Próximo blog» [email protected] Painel Sair Estação ZN Estamos estudando e o resultado disso postamos aqui. Sinceramente desejamos que o conteúdo aqui semeado possa ser útil para muitas pessoas. Seja bem‐vindo e fique à vontade para contribuir da forma que puder e quiser. Bola pra frente ... :)

Upload: alexandre-de-xango

Post on 24-Dec-2015

43 views

Category:

Documents


18 download

DESCRIPTION

1232121

TRANSCRIPT

Page 1: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

quarta‐feira, 15 de abril de 2009

Validação de CPF e CNPJ com Javascript ‐Delphi/Intraweb

por GMotta ZN

Mais um da série ... (da séria série ...)Ok, já fizemos vários artigos sobre como usar Javascript no Intraweb.Tenho gastado tempo registrando essa abordagem por vários motivos:

Um deles é (uma tecla que venho batendo bastante) a importância debuscar um equilíbrio, distribuído responsabilidades entre client‐side eserver‐side (obviamente, me refiro ao contexto restrito os sistemasdesenvolvidos para plataforma web). Um segundo motivo pode ser:“Como fazer isso, se eu uso Delphi/Intraweb?” Na medida em queessa é uma questão que considero possuir alguma relevância. Outromotivo, porem, trata sobre “Qual implicação, ou quais implicações,terei ao percorrer este caminho?” Tenho procurado, nos assuntosabordados, trazer alguns elementos que apontem para a responder aessa questão.

Justamente, esse último ponto, sobre as implicações, ou seja, falarsobre algumas vantagens e desvantagens, é um dos objetivos dessetexto. No Intraweb existem certas particularidades ao se aplicar oJavascript, uma delas é o evento “onSubmit” do form definido numapágina web. Veremos, então, sobre isso mais adiante.

Neste artigo pretendo mostrar também como podemos usar apassagem por parâmetro, de uma função Javascript, para areferência de um objeto “html” de um form no Intraweb. Seguindo ametodologia de ir do mais simples para o mais complexo, iniciaremosnossa parte prática com a criação de uma função para validação nolado cliente. Validação essa para a qual atribuiremos aresponsabilidade de exemplificar esse uso de parâmetros, ao qual mereferi, em Javascript, relacionado aos objetos Intraweb.

Quero usar um exemplo que seja prático, ordinário, para um cenáriode sistemas de informação. Portanto, vamos criar uma função paravalidar CPF, uma outra para validar CNPJ e uma terceira função quevai opcionalmente validar CNPJ, CPF, ou os dois simultaneamente.Desta forma teremos uma função polivalente (a qual servirá para

Groove ZN ‐ byGrooveshark

RSS Feed

0   mais    Próximo blog» [email protected]   Painel   Sair

Estação ZNEstamos estudando e o resultado disso postamos aqui. Sinceramente desejamos que oconteúdo aqui semeado possa ser útil para muitas pessoas.Seja bem‐vindo e fique à vontade para contribuir da forma que puder e quiser.Bola pra frente ... :)

Page 2: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

validar ambos os casos), cujo o processamento será realizado no ladodo cliente.

Javascript para validar CNPJ, CPF no Delphi/Intraweb

Inicie um novo projeto Intraweb no Delphi, adicione no IWForm1 umIWEdit e três IWButtons. Em seguida, defina uma área de declaraçõesde constantes e digite conforme ilustrado abaixo:

implementation

uses IWBaseForm;

{$R *.dfm}const AQuebraLinhaJsZN = #13; AFncCriticaCIC = ' function CriticaCIC(ZnNumCic, ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN +

Blog in English ‐ GoogleTranslator version

Busca no blog:Pesquisar  

Conteúdo

Aleatório

Cyber Culture

Games

Multimídia

Música

Programação

WEB

Colaboradores

ralencar

Pedro

Felipe Guerço

Daniel Bezerra

Bruno Lichot

GMotta ZN

Amigos do EstaçãoZN ‐Muito obrigado!

Participar deste siteGoogle Friend Connect

Membros (41)  Mais »

Arquivo do blog

►  2011 (6)

►  2010 (2)

▼  2009 (25)

Page 3: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;

AFncCriticaCPF = ' function ZnVerificaCPF (ZnCpfObj){ ' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZnCpfObj.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZnCpfObj.value.length; i++){gmSort[i] = ZnCpfObj.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN + ' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZnCpfObj.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 9; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (10 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(9))) ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 10; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (11 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(10))){ ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' //alert("O CPF INFORMADO É VÁLIDO."); ' + AQuebraLinhaJsZN + ' return true; ' + AQuebraLinhaJsZN + '} ' + AQuebraLinhaJsZN;

AFncCriticaCNPJ = ' function ZnVerificaCnpj(ZNObjInput){' + AQuebraLinhaJsZN + ' var ZnDigitos, ZnDg, ZnSum, ZnCount;' + AQuebraLinhaJsZN + ' var ZnResult, ZnPos, tamanho;' + AQuebraLinhaJsZN + ' var ZnAuxCNPJ = ZNObjInput.value.replace(/\D+/g, "");' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' if (ZnAuxCNPJ.length != 14){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZNObjInput.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZNObjInput.value.length; i++){gmSort[i] = ZNObjInput.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN +

►  Ago (2)

►  Mai (6)

▼  Abr (6)

Controle de Versão ‐"Seus problemasacabaram!"

Ajax/JSON & Delphitechnologies–Webbrocker, Intra...

Navegar? Pois é, eupreciso ...

O Cara é o Kutiman

Mídias na Web ‐ Aquestão depropriedadeintelectu...

Validação de CPF eCNPJ com Javascript‐ Delphi/In...

►  Mar (5)

►  Fev (2)

►  Jan (4)

►  2008 (80)

►  2007 (125)

tags

.NET

ADO

AJAX

Apache

Arquitetura de Software

ASP.NET

Audio

Automação OLE

Banco de Dados

BDS

C#

Componentes

Page 4: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZNObjInput.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnAuxTamanho = ZnAuxCNPJ.length - 2' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(0)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnAuxTamanho = ZnAuxTamanho + 1;' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;}' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(1)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;}' + AQuebraLinhaJsZN + ' else {' + AQuebraLinhaJsZN + ' return true;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN;

Dando continuidade, para usarmos o que acabamos de definirdevemos usar as propriedades específicas dos componentes Intrawebdestinadas a trabalhar com Javascript. Elas existem tanto no IWForm(Formulário Delphi para web), quanto nos controles, IWControls.

Evento OnCreate do IWFrom1:

Controle de Versão

CSS

Cyber Culture

DBA

Delphi

Diversos

English

Ferramentas Case

Flash

HTML

Humor

IDE

Internet

Internet Explorer

Intraweb

Introdução a Programção

Introdução HarmoniaFuncional

Java

Javascript

JCL

Json

Linq

Linux

Literatura Delphi

Mencoder

Modelagem

Mplayer

Multimidia

Multimídia

Music

MySQL

Música

Navegadores

NetBeans

Novidades

OLE DB

Oracle

Page 5: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

procedure TIWForm1.IWAppFormCreate(Sender: TObject);begin (* Atribuindo a propriedade "JavaScript" do IWForm1 as funções que serão processadas pelo browser*) Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCPF); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCNPJ); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCIC); Self.JavaScript.Add(''); // O IWButton1 vai validar as duas opções CPF e CNPJ IWButton1.Caption := 'Valida CPF e CNPJ'; IWButton1.Width := 200; IWButton1.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true'])); //O IWButton2 vai validar apenas CPF IWButton2.Caption := 'Valida CPF'; IWButton2.Width := 200; IWButton2.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'false', 'true'])); //O IWButton3 vai validar apenas CNPJ IWButton3.Caption := 'Valida CNPJ'; IWButton3.Width := 200; IWButton3.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'false']));end;

No trecho de código acima, podemos observar, comparando com osexemplos postados nos artigos anteriores, sobre Intraweb eJavascript, que o uso de parâmetros nas funções Javascript parareferenciar os objetos do form (na página html), reduz sensivelmentea o número de linhas. Isso melhora a legibilidade do código,consequentimente aumenta a manutenibilidade do mesmo. Visto que,não precisamos usar o temperamental “document.all” (sensível adiversidade de navegadores). Também não precisamos mais do“document.forms[x]”, isso nos abstém da preocupação emreferenciar o form específico (Lembra, no Intraweb 8, o frameworkpode criar vários forms na mesma página?). Obviamente, isso épossível porque a chamada a função esta sendo feita no mesmo formproprietário do objeto que está sendo passado como argumento. Emoutras palavras: O objeto que está sendo passado como parâmetro nafunção critica CIC 2, está definido no mesmo form no qual a funçãoesta sendo chamada. Entretanto, infelizmente, essa abordagem pode encontrar limitações.Vejamos adiante ....

Sobre as funções de validação de CNPJ e CPF, não estou preocupadocom a otimização da lógica que elas implementam. Basiei‐me emalguns dos milhares de exemplos que podemos encontrar na web.

Partituras

PHP

PL/SQL

POO

RPC

RSS

Script

Shell Script

Sibelius

Slackware

SQL

Subversion

Suporte

SVN

Tableless

Tortoise

Tratamento de Exceções

Técnicas de desenvolvimento

UDF

UML

Variedades

VB6

Vídeo‐Game

WAP

Web

Web 2.0

Web 3.0

Webservice

Windowhttp://www.blogger.com/img/blank.gifs

Windows

Windows API

WML

XML

XSL

Zn Ringtones

ZN Media Player

Page 6: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

Com certeza, fiz alguns ajustes. Mas nada que mereça grandeatenção, embora elas funcionem corretamente, no sentido de seremeficientes em alcançarem o objetivo que se propõem. Reiterando, opropósito dessa parte do artigo é exemplificar como resolver viaJavascript uma validação bastante necessária, uma situação comum,presumo, em muitos sistemas (desenvolvidos com Intraweb).

OnClick do IWButton chamar mais de uma função Javascript noevento “onSubmit” do form

Supondo que o IWButton, ou qualquer outro controle que seja, jápossua uma chamada a uma função Javascript. Hipoteticamente,imagine um cenário onde o mesmo IWButton, que vai submeter oform da página web, precisa, no mesmo evento “OnClick”, validar oCIC e fazer qualquer outro tipo de validação.

Note que estou, propositalmente, construindo uma situação onde oclick do botão está relacionado a ação de submeter o form da páginaweb. Além disso, estamos trabalhando com um grau de complexidadeonde você precisa (ou precisará) executar mais de um função emreposta ação do usuário clicar esse botão. O botão “Submit” (nocaso, nosso IWButton1). Ora, grau de complexidade? Isso que vocêdescreveu, Gerson, me parece tão comum! Concordo, é muitocomum se você está trabalhando com outra tecnologia. No Intraweb,lamentavelmente isso não é trivial. Então, prosseguindo, vejamos: Em primeiro lugar, vamos criar asegunda função (a qual será responsável por tornar o valor do IWEdit1obrigatório). Ou seja, para submeter o form da página web, o usuárioserá obrigado a digitar algum valor no IWEdit1. Feito isso, teremosconstruído todos elementos necessários para a experiência que iráconfirmar minha argumentação (assim espero ....). Portanto, naseção “const” (que definimos anteriormente) codificaremos, emforma de outra constante, a string com a função supracitada. Digiteconforme ilustrado abaixo:

AFncValorRequerido = ' function ValorRequerido(){ ' + AQuebraLinhaJsZN + ' var ObjInput = document.getElementById("%s); ' + AQuebraLinhaJsZN + ' var AFriendlyName = "%s"; ' + AQuebraLinhaJsZN + ' if (ObjInput.value == ""){ ' + AQuebraLinhaJsZN + ' alert("É obrigatório o valor para o campo: " + AFriendlyName); ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FD88AA"; ' + AQuebraLinhaJsZN + ' ObjInput.focus(); ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FFFFFF"; ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN +

Links

Willian Rodrigues

Web 4

Shimatai

Pensamentos de umProfissional de TI

Malta on Delphi

Linguagem de Máquina

Bruno Lichot ‐ Borland

Atelier das Idéias

Helio Delmiro

Beijo Partido ‐ 10/09/2008

All The Things YouAre ‐ 03/09/2008

Inaiá ‐ 26/05/2007

Um Novo Tempo ‐Música ‐ 20/05/2007

Romã ‐ Música ‐ 17/05/2007

Page 7: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

' }' + AQuebraLinhaJsZN;

Em seguida faremos uma pequena modificação na primeira funçãoque criamos, “CriticaCIC”. No caso, ela é a segunda constante dedefinimos para o exemplo anterior, a “AFncCriticaCIC”. Espere, nãoé exatamente isso o que faremos. O que quero realmente fazer écopiar a constante “AFncCriticaCIC”, a partir disso, definir uma novacom o mesmo conteúdo. Porque, desta forma posso fazer asalterações que preciso, sem perder completamente o exemploanterior. Logo, assim sendo, quem estiver acompanhando este artigopoderá facilmente testar e verificar a diferença entra as duasestratégias (“do grego, "Στρατηγικη"... ...no inglês, "strategy"......no francês, "stratégie"... ZzZzZzZzzzz...... ...Senhor leitor, osenhor está dormindo? Senhor leitor, tenha bondade..”.(Parafraseando Capitão Nascimento)

Prosseguindo (era brincadeira), retomemos: Criaremos então a novaconstante a partir da cópia de “AFncCriticaCIC”:

AFncCriticaCIC2 = ' function CriticaCIC2(ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' var ZnNumCic = document.getElementById("%s); ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebra

Page 8: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

LinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN + ' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;

Essa nova versão da crítica de “CIC” possui um parâmetro a menos.Eu retirei o argumento referente ao objeto do form (input que recebeo valor digitado do suposto CIC). Já que decidimos não perder o quefoi feito no exemplo anterior, vamos adicionar mais um IWButton. OIWButton4, servirá, nessa segunda parte do artigo, para chamar anova critica CIC (o conteúdo da AFncCriticaCIC2). Feito isso, vamosacrescentar mais umas linhas de código no evento “OnCreate” doIWForm1.

(* segunda parte do artigo: OnClick do IWButton chamar mais de uma função Javascript *) IWEdit1.FriendlyName := 'CIC: "CNPJ" ou "CPF"'; Self.JavaScript.Add('//**************************************'); Self.JavaScript.Add('//segunda parte do artigo:' + #13 + '// OnClick do IWButton chamar mais de uma função Javascript'); Self.JavaScript.Add(Format(AFncCriticaCIC2, [UpperCase(IWEdit1.Name)])); Self.JavaScript.Add('');

Self.JavaScript.Add(''); Self.JavaScript.Add(Format(AFncValorRequerido, [UpperCase(IWEdit1.Name), IWEdit1.FriendlyName])); Self.JavaScript.Add('//*******www.estacaozn.blogspot.com**********');

IWButton4.Caption := 'Valor Obrigatório & Valida CIC'; IWButton4.Width := 360; IWButton4.ScriptEvents.Add('onClick').EventCode.Add( 'ValorRequerido() && CriticaCIC(true, true)');

No Intraweb, chamar, efetivamente, no evento “onClick”, mais deum função pode ser feito declarando o nome das funções, juntamentecom o operador lógico adequado, ao caso específico, na propriedade“ScriptEvent” do componente escolhido (No nosso caso o escolhido foio TIWButton). Provavelmente, essa não deve ser a única forma de sefazer isso, essa é apenas uma (suponho ;‐)). Especificamente a que euencontrei no momento para alcançar meu objetivo.

Page 9: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

Cabe registrar que, como alternativa, para propriedade“ExtraTagParams” existe um restrição. Só funciona se a ação nãoenvolver o submit do form. Como posso ter certeza do acabei deafirmar?Para exemplificar, respondendo a pergunta anterior, vamos submetero form. Contudo, para isso, precisamos pelo menos processar algo noservidor. Com essa finalidade, codificaremos qualquer coisa dummyno evento OnClick do componente Delphi/Intraweb TIWButton4.Adicione um novo componente, um IWLabel, em seguida, acompanhetrecho de código abaixo:

procedure TIWForm1.IWButton4Click(Sender: TObject);begin IWLabel1.Font.Size := 16; IWLabel1.Caption := Format('Valor digitado válido: %s', [IWEdit1.Text]); ;end;

Veja, como o Intraweb monta a função que submete o form:

var IWLABEL1IWCL = null; var IWBUTTON1IWCL = null; var IWEDIT1IWCL = null; var IWBUTTON2IWCL = null; var IWBUTTON3IWCL = null; var IWBUTTON4IWCL = null; function IWBUTTON4_onclick(event) { return ValorRequerido() && CriticaCIC2(true, true) }

function IWBUTTON4_onclick0(event) {return SubmitClickConfirm('IWBUTTON4','', true, '');}

Ok, finalizamos! Podemos testar, F9 .. e manda ver ...

Prova dos Nove

Considero que terminamos o assunto aqui. Se por acaso você indaquer conferir o que eu afirmei acima prossiga:Agora vamos testar se realmente, de fato, quando esta situaçãoacontece, não é possível ter sucesso usando a propriedade“ExtraTagParams”.Adicionaremos mais um IWButton, no meu exemplo esse será oIWButton5. Retornaremos ao evento “OnCreate” do IWForm1 (Unit1)e codificaremos a chamada ao Javascript de crítica de valorrequerido e validação de CIC, na propriedade ExtraTagParams doúltimo IWButton adicionado. Veja abaixo como ficou:

Page 10: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

procedure TIWForm1.IWAppFormCreate(Sender: TObject);begin Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCPF); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCNPJ); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCIC); Self.JavaScript.Add(''); // O IWButton1 vai validar as duas opções CPF e CNPJ IWButton1.Caption := 'Valida CPF e CNPJ'; IWButton1.Width := 200; IWButton1.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true'])); //O IWButton2 vai validar apenas CPF IWButton2.Caption := 'Valida CPF'; IWButton2.Width := 200; IWButton2.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'false', 'true'])); //O IWButton3 vai validar apenas CNPJ IWButton3.Caption := 'Valida CNPJ'; IWButton3.Width := 200; IWButton3.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'false']));

(* segunda parte do artigo: OnClick do IWButton chamar mais de uma função Javascript *) IWEdit1.FriendlyName := 'CIC: CNPJ ou CPF'; Self.JavaScript.Add('//**************************************'); Self.JavaScript.Add('//segunda parte do artigo:' + #13 + '// OnClick do IWButton chamar mais de uma função Javascript'); Self.JavaScript.Add(Format(AFncCriticaCIC2, [UpperCase(IWEdit1.Name)])); Self.JavaScript.Add('');

Self.JavaScript.Add(''); Self.JavaScript.Add(Format(AFncValorRequerido, [UpperCase(IWEdit1.Name), IWEdit1.FriendlyName])); Self.JavaScript.Add('//*******www.estacaozn.blogspot.com**********');

IWButton4.Caption := 'Valor Obrigatório & Valida CIC'; IWButton4.Width := 360; IWButton4.ScriptEvents.Add('onClick').EventCode.Add( 'return ValorRequerido() && CriticaCIC2(true, true)');

(* testando chamar duas funções Javascript na propriedade ExtraTagParams *)

IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true']));end;

Page 11: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

O trecho que acabamos de digitar inicia com o comentário da linha48. Note que fizemos a chamada semelhante ao IWButton4. Da formacomo está agora, funciona perfeitamente. Mesmo que eu faça achamada, no IWButton5, igualzinho a do IWButton4, funciona.

IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC2(true, true)', [UpperCase(IWEdit1.Name)]));

Todavia, se eu envolver o IWButton5 no submit do form teremosfracasso. Babau! A vaca vai pro brejo. Para conferir basta codificar qualquer coisa no evento “OnClick” doIWButton5. Isso irá forçar um submit para que esse código sejaprocessado no servidor. Vou colocar uma dummy aqui ... veja:

procedure TIWForm1.IWButton5Click(Sender: TObject);begin IWLabel1.Caption := IWEdit1.Text; WebApplication.ShowMessage('Se você esta codificando esse exemplo corretamente, '+ 'essa mensagem nunca não vai ser exibida. Jamais será! Garanto (heheh ..).');end;

O Intraweb tenta ter controle total de alguns eventos do objeto formda página html. Isso acontece de forma mais rigorosa no evento“onLoad”. Eu até entendo a razão deles fazerem isso, mas não aconsidero justificável, e justamente por isso discordo desse tipo decontrole. Acho isso extremamente prejudicial ao desenvolvimento desites, sistemas, serviços, web com o Intraweb. Ao mesmo tempo issodemonstra de forma muito clara o quanto esse framework é frágil eimaturo.

Abaixo, o código integral da Unit1, seguido do código da página htmlgerado pelo Intraweb:

unit Unit1;

interface

uses Classes, SysUtils, IWAppForm, IWApplication, IWColor, IWTypes, IWCompEdit, Controls, IWVCLBaseControl, IWBaseControl, IWBaseHTMLControl, IWControl, IWCompButton, IWCompLabel;

type TIWForm1 = class(TIWAppForm) IWButton1: TIWButton;

Page 12: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

IWEdit1: TIWEdit; IWButton2: TIWButton; IWButton3: TIWButton; IWButton4: TIWButton; IWLabel1: TIWLabel; IWButton5: TIWButton; procedure IWButton5Click(Sender: TObject); procedure IWButton4Click(Sender: TObject); procedure IWAppFormCreate(Sender: TObject); public end;

implementation

{$R *.dfm}const AQuebraLinhaJsZN = #13; AFncCriticaCIC = ' function CriticaCIC(ZnNumCic, ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN + ' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;

AFncCriticaCPF =

Page 13: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

' function ZnVerificaCPF (ZnCpfObj){ ' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZnCpfObj.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZnCpfObj.value.length; i++){gmSort[i] = ZnCpfObj.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN + ' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZnCpfObj.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 9; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (10 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(9))) ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ZnAuxCal = 0; ' + AQuebraLinhaJsZN + ' for (ZnCont = 0; ZnCont < 10; ZnCont ++) ' + AQuebraLinhaJsZN + ' ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (11 - ZnCont); ' + AQuebraLinhaJsZN + ' DgVZn = 11 - (ZnAuxCal % 11); ' + AQuebraLinhaJsZN + ' if (DgVZn == 10 || DgVZn == 11) ' + AQuebraLinhaJsZN + ' DgVZn = 0; ' + AQuebraLinhaJsZN + ' if (DgVZn != parseInt(ZnCpfObj.value.charAt(10))){ ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' //alert("O CPF INFORMADO É VÁLIDO."); ' + AQuebraLinhaJsZN + ' return true; ' + AQuebraLinhaJsZN + '} ' + AQuebraLinhaJsZN;

AFncCriticaCNPJ = ' function ZnVerificaCnpj(ZNObjInput){' + AQuebraLinhaJsZN + ' var ZnDigitos, ZnDg, ZnSum, ZnCount;' + AQuebraLinhaJsZN + ' var ZnResult, ZnPos, tamanho;' + AQuebraLinhaJsZN + ' var ZnAuxCNPJ = ZNObjInput.value.replace(/\D+/g, "");' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' if (ZnAuxCNPJ.length != 14){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' var gmSort = new Array(ZNObjInput.value.length); ' + AQuebraLinhaJsZN + ' for (i=0; i< ZNObjInput.value.length; i++){gmSort[i] = ZNObjInput.value.charAt(i);} ' + AQuebraLinhaJsZN + ' gmSort.sort(); ' + AQuebraLinhaJsZN + ' if (gmSort[0] == gmSort[gmSort.length -1]){ ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZNObjInput.value); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN +

Page 14: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

' ZnAuxTamanho = ZnAuxCNPJ.length - 2' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(0)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnAuxTamanho = ZnAuxTamanho + 1;' + AQuebraLinhaJsZN + ' ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho);' + AQuebraLinhaJsZN + ' ZnSum = 0;' + AQuebraLinhaJsZN + ' ZnPos = ZnAuxTamanho - 7;' + AQuebraLinhaJsZN + ' for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){' + AQuebraLinhaJsZN + ' ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--;' + AQuebraLinhaJsZN + ' if (ZnPos < 2)' + AQuebraLinhaJsZN + ' ZnPos = 9;}' + AQuebraLinhaJsZN + '' + AQuebraLinhaJsZN + ' ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11;' + AQuebraLinhaJsZN + ' if (ZnResult != ZnDg.charAt(1)){' + AQuebraLinhaJsZN + ' ZNObjInput.focus();' + AQuebraLinhaJsZN + ' return false;}' + AQuebraLinhaJsZN + ' else {' + AQuebraLinhaJsZN + ' return true;' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN;

AFncValorRequerido = ' function ValorRequerido(){ ' + AQuebraLinhaJsZN + ' var ObjInput = document.getElementById("%s"); ' + AQuebraLinhaJsZN + ' var AFriendlyName = "%s"; ' + AQuebraLinhaJsZN + ' if (ObjInput.value == ""){ ' + AQuebraLinhaJsZN + ' alert("É obrigatório o valor para o campo: " + AFriendlyName); ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FD88AA"; ' + AQuebraLinhaJsZN + ' ObjInput.focus(); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' ObjInput.style.backgroundColor = "#FFFFFF"; ' + AQuebraLinhaJsZN + ' }' + AQuebraLinhaJsZN + ' return true;}' + AQuebraLinhaJsZN;

Page 15: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

AFncCriticaCIC2 = ' function CriticaCIC2(ZnCnpjBool, ZnCpfBool){ ' + AQuebraLinhaJsZN + ' var ZnNumCic = document.getElementById("%s"); ' + AQuebraLinhaJsZN + ' alert("www.estacaozn.blogspot.com verifica CPF/CNPJ");' + AQuebraLinhaJsZN + ' var CicValidoZn = false; ' + AQuebraLinhaJsZN + ' ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' if(!ZnVerificaCnpj(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CNPJ Inválido"); ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else if (!ZnCnpjBool && ZnCpfBool){ ' + AQuebraLinhaJsZN + ' if (!ZnVerificaCPF(ZnNumCic)){ ' + AQuebraLinhaJsZN + ' alert("CPF inválido"); ' + AQuebraLinhaJsZN + ' return false; ' + AQuebraLinhaJsZN + ' ;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' else { ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCnpj(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(CicValidoZn){ ' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN + ' else{ ' + AQuebraLinhaJsZN + ' CicValidoZn = ZnVerificaCPF(ZnNumCic); ' + AQuebraLinhaJsZN + ' if(!CicValidoZn){ ' + AQuebraLinhaJsZN + ' alert("CIC Inválido") ' + AQuebraLinhaJsZN + ' return false;} ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' } ' + AQuebraLinhaJsZN + ' var ZnMsg = ""; ' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPJ ou CNPJ"; }' + AQuebraLinhaJsZN + ' if (ZnCnpjBool && !ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CNPJ"; }' + AQuebraLinhaJsZN + ' if (!ZnCnpjBool && ZnCpfBool) { ' + AQuebraLinhaJsZN + ' ZnMsg = "CPF"; }' + AQuebraLinhaJsZN + ' alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value);' + AQuebraLinhaJsZN + ' return true;} ' + AQuebraLinhaJsZN;

procedure TIWForm1.IWAppFormCreate(Sender: TObject);begin Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCPF); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCNPJ); Self.JavaScript.Add(''); Self.JavaScript.Add(AFncCriticaCIC); Self.JavaScript.Add(''); // O IWButton1 vai validar as duas opções CPF e CNPJ IWButton1.Caption := 'Valida CPF e CNPJ'; IWButton1.Width := 200; IWButton1.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name),

Page 16: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

'true', 'true'])); //O IWButton2 vai validar apenas CPF IWButton2.Caption := 'Valida CPF'; IWButton2.Width := 200; IWButton2.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'false', 'true'])); //O IWButton3 vai validar apenas CNPJ IWButton3.Caption := 'Valida CNPJ'; IWButton3.Width := 200; IWButton3.ExtraTagParams.Add( Format('onClick=CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'false']));

(* segunda parte do artigo: OnClick do IWButton chamar mais de uma função Javascript *) IWEdit1.FriendlyName := 'CIC: CNPJ ou CPF'; Self.JavaScript.Add('//**************************************'); Self.JavaScript.Add('//segunda parte do artigo:' + #13 + '// OnClick do IWButton chamar mais de uma função Javascript'); Self.JavaScript.Add(Format(AFncCriticaCIC2, [UpperCase(IWEdit1.Name)])); Self.JavaScript.Add('');

Self.JavaScript.Add(''); Self.JavaScript.Add(Format(AFncValorRequerido, [UpperCase(IWEdit1.Name), IWEdit1.FriendlyName])); Self.JavaScript.Add('//*******www.estacaozn.blogspot.com**********');

IWButton4.Caption := 'Valor Obrigatório & Valida CIC'; IWButton4.Width := 360; IWButton4.ScriptEvents.Add('onClick').EventCode.Add( 'return ValorRequerido() && CriticaCIC2(true, true)');

(* testando chamar duas funções Javascript na propriedade ExtraTagParams *)

(* IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC(%s, %s, %s)', [UpperCase(IWEdit1.Name), 'true', 'true'])); *)

IWButton5.ExtraTagParams.Add( Format('onClick=return ValorRequerido() && CriticaCIC2(true, true)', [UpperCase(IWEdit1.Name)]));end;

procedure TIWForm1.IWButton4Click(Sender: TObject);begin IWLabel1.Font.Size := 16; IWLabel1.Caption := Format('Valor digitado válido: %s', [IWEdit1.Text]); ;end;

procedure TIWForm1.IWButton5Click(Sender: TObject);begin IWLabel1.Caption := IWEdit1.Text; WebApplication.ShowMessage('Se você esta codificando esse exemplo corretamente, '+ 'essa mensagem nunca não vai ser exibida. Jamais será! Garanto (heheh ..).');

Page 17: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

end;(* esse trecho para Intrweb 8*)initialization TIWForm1.SetAsMainForm;

Abaixo, trecho código Javascript gerado pelo Intraweb comoresultado do processamento do que implementamos em Delphi.

function ZnVerificaCPF (ZnCpfObj){ var gmSort = new Array(ZnCpfObj.value.length); for (i=0; i< ZnCpfObj.value.length; i++){gmSort[i] = ZnCpfObj.value.charAt(i);} gmSort.sort(); if (gmSort[0] == gmSort[gmSort.length -1]){ alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZnCpfObj.value); return false; } ZnAuxCal = 0; for (ZnCont = 0; ZnCont < 9; ZnCont ++) ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (10 - ZnCont); DgVZn = 11 - (ZnAuxCal % 11); if (DgVZn == 10 || DgVZn == 11) DgVZn = 0; if (DgVZn != parseInt(ZnCpfObj.value.charAt(9))) return false; ZnAuxCal = 0; for (ZnCont = 0; ZnCont < 10; ZnCont ++) ZnAuxCal += parseInt(ZnCpfObj.value.charAt(ZnCont)) * (11 - ZnCont); DgVZn = 11 - (ZnAuxCal % 11); if (DgVZn == 10 || DgVZn == 11) DgVZn = 0; if (DgVZn != parseInt(ZnCpfObj.value.charAt(10))){ return false;} //alert("O CPF INFORMADO É VÁLIDO."); return true; }

function ZnVerificaCnpj(ZNObjInput){ var ZnDigitos, ZnDg, ZnSum, ZnCount; var ZnResult, ZnPos, tamanho; var ZnAuxCNPJ = ZNObjInput.value.replace(/\D+/g, "");

if (ZnAuxCNPJ.length != 14){ ZNObjInput.focus(); return false; } var gmSort = new Array(ZNObjInput.value.length); for (i=0; i< ZNObjInput.value.length; i++){gmSort[i] = ZNObjInput.value.charAt(i);} gmSort.sort(); if (gmSort[0] == gmSort[gmSort.length -1]){ alert("www.estacaozn.blogspot.com: Os números são iguais: " + ZNObjInput.value); return false; }

ZnAuxTamanho = ZnAuxCNPJ.length - 2

Page 18: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho); ZnDg = ZnAuxCNPJ.substring(ZnAuxTamanho); ZnSum = 0; ZnPos = ZnAuxTamanho - 7; for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){ ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--; if (ZnPos < 2) ZnPos = 9; } ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11; if (ZnResult != ZnDg.charAt(0)){ ZNObjInput.focus(); return false; }

ZnAuxTamanho = ZnAuxTamanho + 1; ZnDigitos = ZnAuxCNPJ.substring(0,ZnAuxTamanho); ZnSum = 0; ZnPos = ZnAuxTamanho - 7; for (ZnCount = ZnAuxTamanho; ZnCount >= 1; ZnCount--){ ZnSum += ZnDigitos.charAt(ZnAuxTamanho - ZnCount) * ZnPos--; if (ZnPos < 2) ZnPos = 9;}

ZnResult = ZnSum % 11 < 2 ? 0 : 11 - ZnSum % 11; if (ZnResult != ZnDg.charAt(1)){ ZNObjInput.focus(); return false;} else { return true; } }

function CriticaCIC(ZnNumCic, ZnCnpjBool, ZnCpfBool){ alert("www.estacaozn.blogspot.com verifica CPF/CNPJ"); var CicValidoZn = false; if (ZnCnpjBool && !ZnCpfBool) { if(!ZnVerificaCnpj(ZnNumCic)){ alert("CNPJ Inválido"); return false;} } else if (!ZnCnpjBool && ZnCpfBool){ if (!ZnVerificaCPF(ZnNumCic)){ alert("CPF inválido"); return false; ;} } else { CicValidoZn = ZnVerificaCnpj(ZnNumCic); if(CicValidoZn){ return true;} else{ CicValidoZn = ZnVerificaCPF(ZnNumCic); if(!CicValidoZn){ alert("CIC Inválido") return false;} } } var ZnMsg = ""; if (ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPJ ou CNPJ"; } if (ZnCnpjBool && !ZnCpfBool) { ZnMsg = "CNPJ"; }

Page 19: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

if (!ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPF"; } alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value); return true;}

//**************************************//segunda parte do artigo:// OnClick do IWButton chamar mais de uma função Javascript function CriticaCIC2(ZnCnpjBool, ZnCpfBool){ var ZnNumCic = document.getElementById("IWEDIT1"); alert("www.estacaozn.blogspot.com verifica CPF/CNPJ"); var CicValidoZn = false; if (ZnCnpjBool && !ZnCpfBool) { if(!ZnVerificaCnpj(ZnNumCic)){ alert("CNPJ Inválido"); return false;} } else if (!ZnCnpjBool && ZnCpfBool){ if (!ZnVerificaCPF(ZnNumCic)){ alert("CPF inválido"); return false; ;} } else { CicValidoZn = ZnVerificaCnpj(ZnNumCic); if(CicValidoZn){ return true;} else{ CicValidoZn = ZnVerificaCPF(ZnNumCic); if(!CicValidoZn){ alert("CIC Inválido") return false;} } } var ZnMsg = ""; if (ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPJ ou CNPJ"; } if (ZnCnpjBool && !ZnCpfBool) { ZnMsg = "CNPJ"; } if (!ZnCnpjBool && ZnCpfBool) { ZnMsg = "CPF"; } alert("Valor Validado Ok, " +ZnMsg + ": " + ZnNumCic.value); return true;}

function ValorRequerido(){ var ObjInput = document.getElementById("IWEDIT1"); var AFriendlyName = "CIC: CNPJ ou CPF"; if (ObjInput.value == ""){ alert("É obrigatório o valor para o campo: " + AFriendlyName); ObjInput.style.backgroundColor = "#FD88AA"; ObjInput.focus(); return false; } else { ObjInput.style.backgroundColor = "#FFFFFF"; } return true;}

//*******www.estacaozn.blogspot.com**********

function Validate() { return true;}

Page 20: Estação ZN_ Validação de CPF e CNPJ Com Javascript - Delphi_Intraweb

 

tags: BDS, Delphi, Intraweb, Javascript, Técnicas dedesenvolvimento, Web

4 comentários:

usagipan 03/05/09 16:06

Estou começando a trabalhar com Delphi IntraWeb e gosteimuito dos seus posts! Esse é um assunto muito difícil de acharna internet. Obrigada por postá‐los e parabéns pelo site!!! =D

Responder

GMotta ZN 03/05/09 17:44

Obrigado pelo feedback!Mesmo que esse conteúdo sirva apenas pra uma pessoa (o quenão é caso), pra mim, já valeu.Tks!

Responder

wagner_tec 18/05/10 23:00

Muito bom o seu artigoIsso vale para muitos.

Responder

Anônimo 04/10/11 22:50

Excelente,Estou sempre de olho no teu site para procurar assuntos sobreintraweb.Tks.Renato

Responder