Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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: codigos.txt
Description: text/plain (2.2 KB)

In response to

Responses

pgsql-es-ayuda by date

Next:From: coconautaDate: 2010-02-25 15:23:44
Subject: Re: problema arranque postgres y programa java
Previous:From: Silvio QuadriDate: 2010-02-25 10:10:45
Subject: Re: problema arranque postgres y programa java

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group