[firebase-br] Dígito verificador

Henrique Ribeiro kikeribeiro em gmail.com
Seg Jun 8 10:57:36 -03 2015


Perdoe se não li a solução completa, mas penso que indiferente da forma
adotada, USE A FÓRMULA que os bancos usam para o DV, e me perdoe a caixa
alta, mas é para destacar a importância do que falo.

Em 8 de junho de 2015 09:24, Sandro Marcelo Pascoal <sandropascoal em gmail.com
> escreveu:

> Fábio.
> Vejo 2 saídas para isso.
> 1) Vc cria um trigger para executar o código que calcula do DV (recomendo
> essa).
> 2) Vc cria uma dll com a função de cálculo do DV e usar ela no BD.
>
> Com relação a usar o generator dentro do trigger/procedure, é simples. Vc
> usaria CODIGO = GEN_ID(NOME_DO_GEN, 1) e depois faria o cálculo do DV
> usando a variável CODIGO.
>
> Não tenho certeza se é isso que você precisa. Talvez não tenha entendido.
>
> Sandro
>
>
> On 06/06/2015 16:56, Fabio Cardoso wrote:
>
>> Amigos,
>>
>> Estou criando uma tabela de clientes com o gerador automático de código
>> para o campo CLIENTE_ID. O meu caso é que, em vez de usar o gerador padrão
>> do firebird, onde ele gera o código sequencial (1, 2, 3,.....), eu quero
>> gerar esse código sequencial adicionando um dígito verificador para ele.
>>
>> Assim, quando eu cadastrar três clientes, em vez de ficar assim
>> CLIENTE_ID    -     CLIENTE_NOME
>> 1    FABIO
>> 2     JOÃO
>> 3     CARLOS
>>
>> Ficaria assim:
>> 19    FABIO
>> 27    JOAO
>> 35    CARLOS
>>
>> Onde, o código é composto do 1, que é o sequencial + 9, que é o dígito
>> verificador desse 1. Eu baixei um código que calcula esse dígito
>> verificador no Delphi, mas gostaria de fazer um generator do firebird pra
>> realizar essa tarefa:
>>
>> function DvModulo11 ( str: String ): Char;
>> var soma, fator, i: Integer;
>>
>>   function chInt ( ch: Char ): ShortInt;
>>   begin
>>     Result := Ord ( ch ) - Ord ( '0' );
>>   end;
>>
>>   function intCh ( int: ShortInt ): Char;
>>   begin
>>     Result := Chr ( int + Ord ( '0' ) );
>>   end;
>>
>> begin
>>   soma := 0;
>>   fator := 2;
>>   for i := Length ( str ) downto 1 do
>>   begin
>>     soma := soma + chInt ( str[i] ) * fator;
>>     Inc ( fator );
>>     if fator = 10 then
>>     fator := 2;
>>   end;
>>   soma := 11 - ( soma mod 11 );
>>   if soma >= 10 then
>>     Result := '1'
>>   else
>>   Result := intCh ( soma );
>> end;
>>
>>
>> um abraço,
>> Fabio.
>>
>> ---
>> Este email foi escaneado pelo Avast antivírus.
>> https://www.avast.com/antivirus
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>> http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>
>>
>
> --
>
> *Sandro Marcelo Pascoal*
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 

Atenciosamente,

Luiz Henrique E. Ribeiro
Técnico em Informática
LACEN/SC
http://lacen.saude.sc.gov.br/
48 3251-7835

As informações existentes nessa mensagem e nos arquivos anexados são para
uso restrito, sendo seu sigilo protegido por lei. Caso não seja
destinatário, saiba que leitura, divulgação ou cópia são proibidas. Favor
apagar as informações e notificar o remetente. O uso impróprio será tratado
conforme as normas da empresa e a legislação em vigor.

The information contained in this message and in the attached files are
restricted, and its confidentiality protected by law. In case you are not
the addressee, be aware that the reading, spreading and copy of this message
is unauthorized. Please, delete this message and notify the sender. The
improper use o f this information will be treated according the company's
internal rules and legal laws.

Graça a vós e paz da parte daquele que é, e que era, e que há de vir
(Apocalipse
1:4 <https://www.bibliaonline.com.br/acf/ap/1/4+#v4>).
Pois ainda em bem pouco tempo aquele que há de vir virá, e não
tardará.  (Hebreus
10:37) <https://www.bibliaonline.com.br/acf/hb/10/37+#v37>



Mais detalhes sobre a lista de discussão lista