Sqids – Generar IDs cortos y únicos a partir de números

Sqids, un sucesor rebautizado de Hashids, pretende convertir enteros en IDs alfanuméricos cortos al estilo YouTube, con funciones como alfabetos personalizados y filtrado de groserías. Los comentaristas comparan sus ventajas con enfoques más simples como base62/base64, UUID/ULID o esquemas personalizados basados en Feistel, y cuestionan si una dependencia adicional está justificada para lo que esencialmente es una codificación reversible y no criptográfica. Una preocupación recurrente es la lista de bloqueo evolutiva para las «malas palabras», que puede cambiar cómo se codifican los IDs con el tiempo y arriesga incoherencias entre idiomas y versiones.

Cobertura de idiomas y modelo de comunidad

  • El sitio enumera muchos idiomas; solo algunos están implementados, y otros son repositorios «esqueleto» para medir el interés e invitar a contribuir.
  • Algunos ven esto como una forma ingeniosa de construir comunidad y una buena tarea de entrada en FOSS; a otros les resulta confuso al principio, pero señalan que las señales visuales distinguen los idiomas implementados de los de marcador de posición.
  • Se especula que el seguimiento de clics en las insignias de idioma sirve para priorizar los puertos.

Relación con Hashids y otros esquemas de ID

  • Sqids es, esencialmente, el sucesor/cambio de marca de Hashids, con objetivos similares: codificaciones cortas y aptas para URLs de enteros.
  • Se compara con base64/base58/base36, nanoid, UUID/ULID, Crockford base32 y varios esquemas personalizados; muchos sostienen que esos son más simples y a menudo «suficientemente buenos».
  • Algunos prefieren el cifrado que preserva el formato o permutaciones basadas en Feistel en lugar de Sqids para ocultar IDs secuenciales.

Filtrado de groserías y listas de bloqueo

  • Las listas de bloqueo integradas generan un gran debate.
  • Preocupaciones: las listas son específicas de cada idioma, incompletas y difíciles de mantener; cambiar los valores predeterminados puede cambiar las codificaciones con el tiempo.
  • La biblioteca recomienda proporcionar una lista de bloqueo personalizada para mantener estables las salidas; los críticos dicen que este diseño es frágil y que la compatibilidad entre idiomas puede divergir.
  • Propuestas alternativas: elegir alfabetos que hagan imposible o improbable la profanidad (por ejemplo, omitir vocales y caracteres ambiguos) en lugar de filtrar cadenas generadas.

Unicidad, estabilidad y diseño del algoritmo

  • El hilo examina cómo Sqids garantiza una asignación sin colisiones desde arrays de enteros a cadenas, incluyendo cómo reintenta con palabras malas sin romper la inyectividad.
  • Matiz importante: la decodificación es estable, pero la codificación de los mismos números puede cambiar si cambian las listas de bloqueo o la configuración; no hay garantía de un único ID canónico salvo que se imponga uno.

Seguridad, ofuscación e IDs de usuario

  • La biblioteca dice explícitamente que no sirve para seguridad ni para ocultar datos; la salida es reversible con el alfabeto.
  • Aun así, algunas personas lo presentan como una forma de ocultar IDs secuenciales o recuentos de usuarios, algo que otros llaman engañoso o «seguridad por oscuridad».
  • Para ocultar métricas de negocio o impedir la enumeración de IDs, los comentaristas recomiendan UUIDs aleatorios, IDs cifrados, redes Feistel u otros enfoques criptográficos.

Casos de uso, practicidad y alternativas

  • Quienes lo apoyan valoran Sqids por sus URLs visualmente más cortas, al estilo «YouTube», y por su interoperabilidad entre lenguajes.
  • Los escépticos señalan que, para muchas aplicaciones, las codificaciones base-N simples, los slugs o los UUID son más fáciles, ya están disponibles y evitan la complejidad de las listas de bloqueo.
  • Algunos cuestionan la necesidad de una biblioteca dedicada, dado que muchos casos de uso son «unas pocas líneas de código», aunque otros sostienen que la estandarización y la portabilidad la justifican.