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


Responder a