Complementando o assunto... O Componente ACBrValidador do Projeto ACBr, é capaz de validar (e formatar) todas as Insc.Estaduais do Brasil, além de CPF, CNPJ, PIS, cartão de crédito, cheques, CEP...
[]s Daniel Conheça o Projeto ACBr - Automaçao Comercial Brasil Equipamentos para automação ? DJSystem - a Loja Patrocinadora do ACBr De: Berdam <berdamzi...@yahoo.com.br> Para: delphi-br@yahoogrupos.com.br Enviadas: Sexta-feira, 27 de Novembro de 2009 15:48:19 Assunto: Res: [delphi-br] Validação de IE do RS pois é, problema para o cliente essa dll não tem, porém em modo de debug no delphi salta umas mensagens. Mas já verifiquei que a rotina que eu utilizo tinha uma validação que não existe mais no RS. A sua dll gera essas mensages ?? Como vc carrega sua dll, dinamicamente ou de modo fixo ??? Agradeço a ajuda ------------ --------- --------- --------- --------- --------- - Uberdam Cavaletti Programador Delphi Formado em Tecnologia da Informação Pós-graduado em desenvolvimento Java. Professor Tópicos Especias em BD - Unoesc Xanxerê Professor Estruturas de Dados - Unoesc Xanxerê http://buscatextual .cnpq.br/ buscatextual/ visualizacv. jsp?id=K4251629Y 0 ------------ --------- --------- --------- --------- --------- - ____________ _________ _________ __ De: Alemão <forumdelphi@ gmail.com> Para: delphi...@yahoogrup os.com.br Enviadas: Sexta-feira, 27 de Novembro de 2009 15:40:36 Assunto: Re: [delphi-br] Validação de IE do RS Berdam, Eu uso a DLL disponibilizada no site do sintegra sem problema algum. Ela foi atualizada a um tempo atrás, pode ser que tinha algum problema e eles arrumaram. Alemão 2009/11/27 jalosii gmail <jalo...@gmail. com> > aqui quebrou as linhas, se precisar entre em contato > al...@digitalsystem .com.br que te envio a função diretamente. > > berdam escreveu: > > o problema daquela dll é que em debug ela solta umas msgs que atrapalham > > muito. > > > > Irei tentar ver seu código > > > > jalosii gmail escreveu: > > > >> eu usava a dll pra validar os IEs, mas depois que encontrei essa função > >> na net, arrumei o que precisava e uso ela sem problemas. > >> > >> function ConfereIE(IE, UF: String; ApenasDigitos: Boolean = True): > >> Boolean; > >> const > >> MASCARAS_: String = ' NNNNNNNNX- NNNNNNNNNNNXY- > >> NNNNNNNNNNX- NNNNNNNNNNNNNX- NNNNNNYX-' + > >> ' NNNNNNNNXY- NNNNNNNNNX- NNNNNNNNXNNY- NNNNNNNNXNNN- > >> NNNNNNNXY'; > >> PESOS_: String = > >> 'GFEDCJIHGFEDCA- FEDCJIHGFEDCAA- GFEDCJIHGFEDAC- AAAAAAAAGFEDCA- > >> AAAAABCDEFGHIA- ' > >> + > >> > >> 'AAAJIAAHGFEDCA- FEDCBJIHGFEDCA- IHGFEDCHGFEDCA- HGFEDCHGFEDCAA- > >> ABCBBCBCBCBCAA- ADCLKJIHGFEDCA- ' > >> + > >> > >> 'AABDEFGHIKAAAA- AADCKJIHGFEDCA- AAAAAJIHGFEDCA- AAAAAIHGFEDCAA- > >> AAAAAJIHGFEDCA- AAAAKJIHGFEDCA- '; > >> PESO_: String = > >> 'ABAAAAABBABAAAAAAJ AAIGAHAADAEALLAF NOQ!A!!!! !CC!A!!!! !!K!!H!!! > >> !!!!!!M!! !!P!'; > >> ALFA_: String = 'ABCDEFGHIJKLMNOPQR S'; > >> ROTINAS_: String = > >> 'EE011EEEEEEEEEEEE2 EEEEEE0EEEDEDDEE EE0!E!!!! !EE!E!!!! !!E!!E!!! > >> !!!!!!D!! !!E!'; > >> MODULOS_: String = > >> '999999989999999998 9999999999799999 9990900000890900 0000900900000000 > >> 09000090' ; > >> INICIO_ : String = > >> '0020000AB000111X2X 11X11X2XXX2XXXX2 XX2114333XXXX7XC C2X8X56X89X0XXX4 > >> XXXX9XX0' ; > >> MASCARA_: String = 'ABAAAAAEEABAAAACAB AAFDAEAGADAAHIAC AJG'; > >> FATORES_: String = '000010000000100000 0001000011000000 000'; > >> ESTADOS_: String = > >> 'ACACALAPAPAPAMBABA CEDFESGOGOMAMTMS MGPAPBPRPEPIRJRN RSRORORRSCSPSPSE > >> T0TOPERN' ; > >> var > >> c1, c2, alternativa, inicio, posicao, erros, fator, modulo, soma1, > >> soma2, valor, digito: Smallint; > >> mascara, inscricao, a1, a2, peso, rotina: String; > >> begin > >> UF := trim(uppercase( UF)); > >> IE := trim(uppercase( IE)); > >> result := ((IE = 'ISENTO') or (IE = 'EM ANDAMENTO') or ((UF = 'EX') > >> and ((IE = '') or (IE = '00000000000000' )))); > >> posicao := 0; > >> while not result and (posicao < 37) and (IE <> '') do begin > >> inc(posicao) ; > >> if (copy(ESTADOS_ , posicao * 2 - 1, 2)) <> UF then > >> continue; > >> inscricao := ''; > >> for C1 := 1 to 30 do > >> if pos(copy(IE, C1, 1), '0123456789' ) <> 0 then > >> inscricao := inscricao + copy(IE, C1, 1); > >> mascara := copy(MASCARAS_ , pos(copy(MASCARA_ , posicao, 1), ALFA_) * > >> 15 - 14, 14); > >> while length(inscricao) < length(trim( mascara)) do > >> inscricao := '0' + inscricao; > >> if length(inscricao) <> length(trim( mascara)) then > >> continue; > >> inscricao := copy('0000000000000 0' + inscricao, length(inscricao) + > >> 1, 14); > >> erros := 0; > >> alternativa := 0; > >> while alternativa < 2 do begin > >> inc(alternativa) ; > >> inicio := posicao + (alternativa * 37) - 37; > >> peso := copy(PESO_, inicio, 1); > >> if peso = '!' then > >> continue; > >> a1 := copy(INICIO_ , inicio, 1); > >> a2 := copy(copy(inscricao , 15 - length(trim( mascara)) , > >> length(trim( mascara)) ), alternativa, 1); > >> if not ApenasDigitos and (((pos(a1, 'ABCX') = 0) and (a1 <> a2)) or > >> ((pos(a1, 'ABCX') <> 0) and (pos(a2, > >> copy('0123458888- 6799999999- 0155555555- 0123456789' , (pos(a1, > >> 'ABCX') * > >> 11 - 10), 10)) = 0))) then > >> erros := 1; > >> soma1 := 0; > >> soma2 := 0; > >> for C2 := 1 to 14 do begin > >> valor := StrToInt(copy( inscricao, C2, 1)) * > >> (pos(copy(copy( PESOS_, (pos(peso, ALFA_) * 15 - 14), 14), C2, 1), > ALFA_) > >> - 1); > >> soma1 := soma1 + valor; > >> if valor > 9 then > >> valor := valor - 9; > >> soma2 := soma2 + valor; > >> end; > >> rotina := copy(ROTINAS_ , inicio, 1); > >> modulo := StrToInt(copy( MODULOS_, inicio, 1)) + 2; > >> fator := StrToInt(copy( FATORES_, posicao, 1)); > >> if pos(rotina, 'A22') <> 0 then > >> soma1 := soma2; > >> if pos(rotina, 'B00') <> 0 then > >> soma1 := soma1 * 10; > >> if pos(rotina, 'C11') <> 0 then > >> soma1 := soma1 + (5 + 4 * fator); > >> if pos(rotina, 'D00') <> 0 then > >> digito := soma1 mod modulo; > >> if pos(rotina, 'E12') <> 0 then > >> digito := modulo - (soma1 mod modulo); > >> if digito = 10 then > >> digito := 0; > >> if digito = 11 then > >> digito := fator; > >> if (copy(inscricao, pos(copy('XY' , alternativa, 1), mascara), 1) > >> <> IntToStr(digito) ) then > >> erros := 1; > >> end; > >> result := erros = 0; > >> end; > >> end; > >> > >> Berdam escreveu: > >> > >>> Olá pessoal, venho solicitar ajuda principalmente do pessoal do RS. > >>> > >>> Tenho o seguinte IE 4800001926, que quando cadastro no sistema, > >>> > >> acusa que o mesmo é inválido > >> > >>> Tenho o seguinte código para validação, reparem na linha em negrito > >>> > >> ou aquela q tem o nr 467. A validação testa se os primeiros 3 números > >> são maior ou igual a 1 e menor igual a 467. > >> > >>> Porém o início do meu IE é 480, dai ele não entra no if. > >>> > >>> Verifiquei no próprios site do sefaz que existe mesmo essa > >>> > >> validação, será que meu código está desatualizado ?? > >> > >>> Gostaria da ajuda de vcs para resolver isso > >>> > >>> function ChkIERS(const ie: string): Boolean; // 999.999999-9 > >>> var > >>> b, i, soma: Integer; > >>> nro: array[1..10] of byte; > >>> dig: SmallInt; > >>> begin > >>> Result :=false; > >>> if (length(ie) <> 10) then > >>> exit; > >>> if not IsNumero(ie) then > >>> exit; > >>> i :=StrToInt(copy( ie, 1, 3)); > >>> if (i >= 1) and (i <= 467) then //i = 480, > >>> begin > >>> for i :=1 to 10 do > >>> nro[i] :=CharToInt( ie[i]); > >>> b :=2; > >>> soma :=0; > >>> for i :=1 to 09 do > >>> begin > >>> inc(soma, nro[i] * b); > >>> dec(b); > >>> if b = 1 then > >>> b :=9; > >>> end; > >>> dig :=11 - (soma mod 11); > >>> if (dig >= 10) then > >>> dig :=0; > >>> Result :=(dig = nro[10]); > >>> end; > >>> end; > >>> > >>> > >>> > >>> ____________ _________ _________ _________ _________ _________ _ > >>> Veja quais são os assuntos do momento no Yahoo! +Buscados > >>> http://br.maisbusca dos.yahoo. com <http://br.maisbusca dos.yahoo. com> > >>> > >>> [As partes desta mensagem que não continham texto foram removidas] > >>> > >>> > >>> > >>> ------------ --------- --------- ------ > >>> > >>> > >>> > >> > > > > > > > > ------------ --------- --------- ------ > > > > > > > > ------------ --------- --------- ------ > > -- > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > > > [As partes desta mensagem que não continham texto foram removidas] ____________ _________ _________ _________ _________ _________ _ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbusca dos.yahoo. com [As partes desta mensagem que não continham texto foram removidas] ____________________________________________________________________________________ Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]