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.maisbuscados.yahoo.com> > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > ------------ --------- --------- ------ > > > > > > ------------------------------------ -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> <*> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages <*> Para falar com o moderador, envie um e-mail para: delphi-br-ow...@yahoogrupos.com.br Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: delphi-br-unsubscr...@yahoogrupos.com.br <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html