Ver Mensaje Individual
  #8  
Antiguo 06-11-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por agustibaldo Ver Mensaje
Hola gente de Club Delphi.
Les escribo para consultarle alguna idea/código para "acortar" una cadena alfanumérica en una cadena del mismo tipo pero de menor tamaño.
Concretamente, tengo una cadena de 28 caracteres y necesito generar una nueva cadena pero de 8 o 10 caracteres con las siguientes características:

- Debe contar con la menor cantidad de colisiones posibles. Es para generar un código unívoco.
- Debe poder ser reversible. Cod28 --> CODIFICA --> Cod8, Cod8 --> DECODIFICA --> Cod28.

Tal vez se me ha escapado algo (es posible con la edad), pero creo que estás mezclando cosas distintas. Totalmente distintas.

* Un "URL Shortener" se basa en que convierte una cadena de 30 caracteres en otra de 5 caracteres (por decir algo), pero usando una tabla auxiliar donde están ambas. De forma, que la forma de obtener "la cadena larga" es ir a la tabla auxiliar y buscar es registro con la pareja:
CADENA_CORTA = CADENA_LARGA.

* Otra cosa totalmente distinta es "codificar" una CADENA_LARGA de 30 caracteres y obtener una CADENA_CORTA de 5 CARACTERES, teniendo en cuenta además que:
a) Eso sea reversible
b) Que no existan colosiones.

No se si eso es posible, y se acerca más a la teoría de un compresor, que de un codificador.

Lo dicho, seguramente se me está escapando algo...

También hablas de un algoritmo de CRC (o similares de checksum). También es otra cosa.
Un algoritmo de CRC cumple alguna caracteristica de las que comentas, pero no todas. Con un CRC:
a) Puedes convertir una CADENA_LARGA (1234567890qwertyuiopadsfg) en una CADENA_CORTA (34253).
b) Pero a partir de la CADENA_CORTA (34253), nunca podrás obtener la CADENA_LARGA (1234567890qwertyuiopadsfg). ¿De otra forma para qué serviría tener la larga?


Un Saludo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita