[firebase-br] Dígito verificador

Fabio Cardoso fabio em alcanceweb.com.br
Seg Jun 8 10:46:10 -03 2015


Olá Sandro,

Eu concordo com a primeira saída, criar uma trigger. Porém, não sei como 
fazer isso, estou em busca de material na internet pra aprender, talvez 
você possa me dar uma dica da solução do problema.

Boa semana.

att,
Fabio

On 08/06/2015 09:24, Sandro Marcelo Pascoal wrote:
> 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
>>
>
>


---
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus





Mais detalhes sobre a lista de discussão lista