Re: RE: [pgsql-es-ayuda]=?ISO-8859-1?Q?_Identificador_=FAni?=co con md5()

From: Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: 'Lista Ayuda Pgsql' <pgsql-es-ayuda(at)postgresql(dot)org>, Fernando Hevia <fhevia(at)ip-tel(dot)com(dot)ar>
Subject: Re: RE: [pgsql-es-ayuda]=?ISO-8859-1?Q?_Identificador_=FAni?=co con md5()
Date: 2010-02-25 13:15:41
Message-ID: 20100225123403.M71121@fcm.unc.edu.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Wed, 24 Feb 2010 23:23:01 -0300, Alvaro Herrera wrote
> Sebastián Villalba escribió:
> > Efectivamente necesito algo así, que no siga patrón correlativo o determinado.
> > El único requisito es que la longitud debe ser de 7. Por un antojo el
> > "substring(md5(CURRENT_TIME::time)from 7 for 7)" lo hago a partir de la
> > séptima posición, porque se me ocurrió hacerlo así, pero sin contar con ningún
> > fundamento teórico.
>
> Supongo que lo que puedes hacer si te interesa asegurar unicidad es
> convertir el número de la función de Verite en un string de 7
> caracteres. Claro que tendrías que modificarla, porque con una
> cadena de largo 7 en hex tienes a lo más 268.435.456 cadenas
> distintas (16^7), pero la función de Verite retorna 2^32 valores
> distintos (4 mil millones y fracción)
>
> Lo otro que podrías hacer es usar 24 dígitos en vez de 16, con lo que
> tienes espacio para 4500 millones de valores; cubrirías todo el espacio
> de Verite y un poco más. Ahí el único trabajo que tendrías sería
> inventar cómo mapear un número de 32 bits a un string ...

Bueno, yo tengo en un sistemita algo similar, pero que si sigue un orden
correlativo. Necesitaba un código único, alfanumérico de 6 dígitos.

Lo que hago es codificar un campo serial (para garantizar unicidad) en base 36
(utilizando todas las letras utilizables del alfabeto) con lo que tengo 6^36
(un número muy grande).

Un par de ejemplos de la salida:

seba=# SELECT * FROM generar_codigo();
generar_codigo
----------------
0076A4
(1 fila)

seba=# SELECT * FROM generar_codigo();
generar_codigo
----------------
0076A5
(1 fila)

Por si a alguien le sirve, adjunto el código. Son 2 funciones en plpgsql. Saludos!

-
-------------------------------------------
Sebastián Villalba
A. Gestión Informática
Facultad de Cs. Médicas
U.N.C. - Argentina
-------------------------------------------

Attachment Content-Type Size
codigos.txt text/plain 2.2 KB

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message coconauta 2010-02-25 15:23:44 Re: problema arranque postgres y programa java
Previous Message Silvio Quadri 2010-02-25 10:10:45 Re: problema arranque postgres y programa java