• ¿Qué es Sqids?

    Sqids es una pequeña biblioteca de código abierto que puede producir IDs cortos, únicos y con apariencia aleatoria a partir de números.

    La mejor manera de entenderlo es como un convertidor decimal a hexadecimal, pero con algunas características adicionales.

  • Acortamiento de enlaces, generación de IDs únicos de eventos para registros, generación de IDs para productos/objetos en un sitio web (como hace YouTube para videos), generación de IDs cortos para mensajes de texto, códigos de confirmación en correos electrónicos, etc.

  • Cualquier dato que sea sensible. Los IDs generados no son hash y podrían decodificarse de vuelta a números. Por ejemplo, podrían no ser una buena elección para IDs de usuario, ya que una vez decodificados podrían revelar la cantidad de usuarios de tu aplicación.

  • ¿Puedo codificar varios números a la vez?

    Sí. Sqids puede codificar uno o muchos números no negativos en un solo ID. No hay límite en la cantidad de números que puedes codificar, pero hay un límite en el tamaño del número que puedes codificar (dependiendo del lenguaje de implementación).

    Esto es útil por varias razones: podrías codificar una marca de tiempo UNIX y crear IDs que caduquen, o podrías codificar un número de fragmento de base de datos junto con una clave primaria y ahorrar consultas extra a la base de datos.

  • ¿Son únicos los IDs generados?

    Sí, los IDs generados son únicos para la entrada y el alfabeto.

    Ten en cuenta que el alfabeto predeterminado contiene tanto letras mayúsculas como minúsculas, por lo que los IDs predeterminados son sensibles a mayúsculas y minúsculas.

  • ¿Qué limitaciones tiene Sqids?

    Sqids no puede codificar números negativos.

    La longitud mínima del alfabeto es de 3 caracteres.

    El alfabeto no puede contener caracteres multibyte.

    Sqids no puede generar IDs hasta una cierta longitud, solo al menos una cierta longitud. El rango del parámetro de longitud mínima está entre 0 y 255.

    Sqids puede intentar regenerar IDs hasta la longitud del alfabeto, menos uno.

  • ¿Cómo puedo hacer únicos mis IDs?

    La biblioteca acepta un alfabeto personalizado a partir del cual puede generar IDs. Simplemente prebaraja el alfabeto predeterminado que se proporciona.

    Ten en cuenta que con suficiente esfuerzo, alguien podría ingeniar al revés tu alfabeto barajado, así que esto de ninguna manera es una técnica para ocultar datos sensibles.

  • ¿Cómo puedo barajar el alfabeto predeterminado?

    El alfabeto predeterminado se puede encontrar aquí .

    Puedes usar cualquiera de las herramientas en línea de mezcla de cadenas o nuestro playground .

  • ¿Es mejor usar un alfabeto más corto o más largo?

    Depende de tu caso de uso. Un alfabeto más corto producirá IDs más largos y un alfabeto más largo producirá IDs más cortos. Puedes usar el playground para probar cómo podrían verse tus IDs.

  • ¿Puede mi alfabeto consistir solo en números?

    Sí. Ten en cuenta que los IDs generados siguen siendo cadenas y podrían comenzar con un cero.

  • ¿Puedo usar emojis como el alfabeto?

    No. Sqids no admite caracteres multibyte para el alfabeto. Eso incluye emojis y muchos otros caracteres.

  • ¿Por qué rellenar IDs?

    La biblioteca puede extender IDs con caracteres basura para hacer que parezcan más largos. Esto es útil para que no sea tan obvio si estás codificando un número pequeño como 1 o uno grande como 1000000.

    La decodificación no se ve afectada.

  • ¿Puedo hacer que los IDs generados sean más largos?

    Sí, la biblioteca acepta un parámetro de longitud mínima que garantiza que los IDs sean al menos de esa longitud.

    Ten en cuenta que no hay garantía sobre la longitud de tus IDs, solo que no serán más cortos que la longitud que especifiques.

  • ¿Puedo hacer que los IDs generados tengan una longitud específica?

    Hasta cierto punto.

    Establecer una longitud máxima es imposible porque tarde o temprano tus IDs desbordarán con una entrada lo suficientemente grande. Es por eso que solo se admite el parámetro de longitud mínima, y no la longitud exacta o máxima.

  • ¿Por qué usar una lista de bloqueo?

    Una lista de bloqueo puede evitar que ciertas palabras aparezcan en tus IDs. Esto es beneficioso porque los IDs generados están destinados a aparecer en lugares públicos, como la URL.

    Sqids viene con la lista de bloqueo predeterminada que contiene las palabras groseras e inapropiadas más básicas de varios idiomas. Por supuesto, puedes ampliar esa lista con tus propias palabras.

  • ¿Cómo funciona la lista de bloqueo?

    La coincidencia de palabras en la lista de bloqueo no distingue entre mayúsculas y minúsculas.

    Las palabras cortas de menos de 3 caracteres no serán bloqueadas. Las palabras de 3 caracteres deben coincidir exactamente con los IDs. Las palabras de 4 caracteres o más activarán una coincidencia si son una subcadena del ID.

    Si las palabras de la lista de bloqueo contienen números (leetspeak), solo activarán una coincidencia si están al principio o al final del ID.

  • ¿Qué palabras están en la lista de bloqueo predeterminada?

    La lista de bloqueo predeterminada contiene las palabras más comunes groseras e inapropiadas de varios idiomas. Puedes encontrar la lista completa aquí .

  • ¿Qué sucede cuando todos los IDs están bloqueados?

    Cuando el ID generado coincide con una palabra en la lista de bloqueo, la biblioteca intenta regenerarlo.

    Si cada intento de regenerar el ID falla, la función de codificación fallará y devolverá un error. La gestión de ese error depende del usuario.

    La mejor manera de reducir el número de intentos de regeneración es tener un alfabeto más largo, no establecer una longitud mínima y proporcionar una lista de bloqueo más pequeña. Proporcionar una lista de bloqueo vacía desactivará por completo la función.

  • ¿Cómo verificar si los IDs son válidos?

    Decodificar IDs generalmente producirá algún tipo de salida numérica, pero eso no significa necesariamente que el ID sea canónico. Para verificar que el ID sea válido, puedes volver a codificar los números decodificados y comprobar que coincida el ID.

    La razón por la que esto no se hace automáticamente es que si la lista de bloqueo predeterminada cambia en el futuro, no queremos invalidar automáticamente el ID que se ha generado en el pasado y que ahora puede coincidir con una nueva palabra de la lista de bloqueo.

  • ¿Qué sucede cuando se actualiza la lista de bloqueo predeterminada?

    Nos aseguraremos de actualizar el CHANGELOG si y cuando cambie la lista de bloqueo predeterminada.

    Debes tener en cuenta los escenarios en los que una nueva palabra podría ser introducida en la lista de bloqueo predeterminada. En este caso, volver a codificar números puede producir un ID diferente.

    La mejor manera de asegurar que tus IDs se mantengan consistentes en futuras actualizaciones es proporcionar una lista de bloqueo personalizada, incluso si es idéntica a la lista de bloqueo predeterminada actual.

  • ¿Puede la codificación de números diferentes producir IDs idénticos?

    No, codificar números diferentes producirá IDs únicos.

    Sin embargo, debido al diseño del algoritmo, decodificar IDs aleatorios a veces puede producir los mismos números. La mejor manera de verificar si el ID es canónico es simplemente volver a codificar los números decodificados y comprobar que coincida el ID.

  • ¿Qué es Hashids?

    Hashids fue la primera versión de esta biblioteca que salió alrededor de 2013. También producía IDs cortos pero usaba un método ligeramente diferente.

  • ¿Por qué se actualizó Hashids a Sqids?

    Hashids manejaba algunas cosas de manera diferente.

    No admitía una lista de bloqueo personalizada, sino que se basaba en las palabras groseras más comunes en inglés. También usaba el parámetro salt para mezclar el alfabeto, lo que lo hacía un poco confuso porque la biblioteca no tiene nada que ver con la encriptación. Además, utilizaba demasiados caracteres reservados, lo que resultaba en IDs más largos.

    Por eso, hemos decidido actualizar y rebrandear. Se ha simplificado el algoritmo, se han agregado algunas funciones y los repositorios de código están todos bajo un mismo techo ahora .

  • ¿Por qué se eliminó el parámetro salt?

    El parámetro salt se usaba para mezclar el alfabeto y nunca pretendía estar asociado con la seguridad. Tanto Hashids como Sqids funcionan de manera similar a la conversión decimal a hexadecimal, pero con algunas adaptaciones. No hay encriptación de ningún tipo, así que para evitar confusiones, ese parámetro se ha eliminado por completo.

  • ¿Es Hashids compatible con Sqids?

    No, Sqids amplía la funcionalidad de Hashids y tiene objetivos y requisitos de diseño diferentes; por lo tanto, los IDs generados no son compatibles con Hashids.

  • ¿Cómo puedo actualizar de manera segura desde Hashids a Sqids?

    Dado que no hay compatibilidad entre Hashids y Sqids, es imposible simplemente reemplazar Hashids con Sqids.

    Sin embargo, puedes combinar ambos diferenciando a qué biblioteca pertenece cada ID.

    Una de las formas de hacerlo es por la longitud del ID: si estás cambiando a Sqids, puedes proporcionar una longitud mínima mayor. Otra forma es agregar/anexar manualmente un carácter personalizado a los IDs recién generados.

    Finalmente, también podrías intentar decodificar un ID con Hashids para ver si es válido. Si no lo es, descodifica y vuelve a codificar con Sqids para ver si funciona.

  • ¿Dónde puedo encontrar las bibliotecas originales de Hashids?

    Cada implementación en este sitio web enlaza al repositorio original de Hashids, si existe.

  • ¿Cómo puedo contribuir?

    Si quieres apoyar el proyecto, agradeceríamos que marques con estrella nuestros repositorios en Github para tener más visibilidad.

    Si eres desarrollador y no ves una implementación de Sqids para un lenguaje en particular, ayúdanos a convertir la biblioteca. Lo mismo ocurre para un lenguaje de programación que no esté listado.

    Si encuentras un error en la especificación o en alguna de las implementaciones, crea un problema o una solicitud de extracción con una corrección sugerida en el repositorio correspondiente.

    Si hablas varios idiomas, podríamos necesitar tu ayuda para ajustar la lista de bloqueo y ajustar las traducciones del sitio web si ves algún problema.

    Finalmente, si tienes experiencia con Hashids/Sqids, ayúdanos a guiar a nuestra comunidad respondiendo cualquier pregunta que alguien pueda tener.

  • ¿Cómo llevar Sqids a otro lenguaje?

    Si quieres portar Sqids a alguno de los siguientes lenguajes (o a uno nuevo que no esté listado aquí):

    ActionScript , D , Elm , Haxe , Io , PostgreSQL , Raku , Smalltalk , T-SQL , Tcl , VBA

    Haz un fork del repositorio oficial en tu cuenta de Github e implementa la especificación junto con todas las pruebas. Puedes reutilizar cualquiera de los README existentes (ejemplo ).

    Una vez que la biblioteca esté lista, crea una solicitud de extracción. Una vez fusionada, actualizaremos el sitio web.

    Si el repositorio no tiene mantenedores activos, estaremos encantados de invitarte a administrar el repositorio y convertirte en un mantenedor oficial.