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.maisbuscados.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]

Responder a