• Cos'è Sqids?

    Sqids è una piccola libreria open-source che può produrre ID brevi, unici e dall'aspetto casuale da numeri.

    Il modo migliore per pensare è come a un convertitore da decimale a esadecimale, ma con alcune funzionalità extra.

  • Abbreviazione di link, generazione di ID unici per il logging di eventi, generazione di ID per prodotti/oggetti su un sito web (come fa YouTube per i video), generazione di ID brevi per messaggi di testo, codici di conferma nelle email, ecc.

  • Qualsiasi dato che è sensibile. Gli ID generati non sono hash e potrebbero essere decodificati in numeri. Ad esempio, potrebbero non essere una buona scelta per gli ID utente, perché una volta decodificati, potrebbero rivelare il conteggio degli utenti della tua app.

  • Posso codificare diversi numeri contemporaneamente?

    Sì. Sqids può codificare uno o molti numeri non negativi in un singolo ID. Non c'è limite al numero di numeri che puoi codificare, ma c'è un limite a quanto grande può essere un numero che puoi codificare (a seconda del linguaggio di implementazione).

    Questo è utile per diversi motivi: potresti codificare un timestamp UNIX e creare ID che scadono, oppure potresti codificare un numero di frammento del database insieme a una chiave primaria e risparmiare query extra al database.

  • Gli ID generati sono univoci?

    Sì, gli ID generati sono unici rispetto all'input e all'alfabeto.

    Tieni presente però che l'alfabeto predefinito contiene sia lettere maiuscole che minuscole, quindi gli ID predefiniti sono sensibili alle maiuscole e minuscole.

  • Quali limitazioni ha Sqids?

    Sqids non può codificare numeri negativi.

    La lunghezza minima dell'alfabeto è di 3 caratteri.

    L'alfabeto non può contenere caratteri multibyte.

    Sqids non può generare ID fino a una certa lunghezza, solo almeno una certa lunghezza. Il parametro di lunghezza minima è compreso tra 0 e 255.

    Sqids può tentare di rigenerare gli ID fino alla lunghezza dell'alfabeto, meno uno.

  • Come posso rendere unici i miei ID?

    La libreria accetta un alfabeto personalizzato da cui può generare ID. Basta pre-mescolare l'alfabeto predefinito fornito.

    Tieni presente che con sufficiente impegno qualcuno potrebbe decodificare il tuo alfabeto mescolato, quindi questa non è in alcun modo una tecnica per nascondere dati sensibili.

  • Come posso mescolare l'alfabeto predefinito?

    L'alfabeto predefinito si trova qui .

    Puoi utilizzare uno qualsiasi degli strumenti online per mescolare stringhe o il nostro playground .

  • È meglio usare un alfabeto più corto o più lungo?

    Dipende dal tuo caso d'uso. Un alfabeto più corto produrrà ID più lunghi, mentre un alfabeto più lungo produrrà ID più corti. Puoi utilizzare il playground per testare come potrebbero apparire i tuoi ID.

  • Il mio alfabeto può consistere solo di numeri?

    Sì. Tieni presente che gli ID generati sono comunque stringhe e potrebbero iniziare con uno zero.

  • Posso usare emoji come alfabeto?

    No. Sqids non supporta caratteri multibyte per l'alfabeto. Questo include anche emoji e molti altri caratteri.

  • Perché aggiungere zeri agli ID?

    La libreria può estendere gli ID con caratteri casuali per farli sembrare più lunghi. Questo è utile in modo che non sia ovvio se stai codificando un numero piccolo come 1 o un numero grande come 1000000.

    La decodifica non è influenzata.

  • Posso rendere più lunghi gli ID generati?

    Sì, la libreria accetta un parametro di lunghezza minima che garantisce che gli ID siano almeno di quella lunghezza.

    Tieni presente che non c'è alcuna garanzia sulla lunghezza dei tuoi ID: è garantito solo che non saranno più corti della lunghezza specificata.

  • Posso rendere gli ID generati di una lunghezza specifica?

    Fino a un certo punto.

    Impostare la lunghezza massima è impossibile perché prima o poi i tuoi ID andranno in overflow con un input sufficientemente grande. Ecco perché è supportato solo il parametro di lunghezza minima e non la lunghezza esatta o massima.

  • Perché usare una lista nera?

    Una lista nera può impedire che determinate parole appaiano nei tuoi ID. Questo è vantaggioso perché gli ID generati devono apparire in luoghi pubblici, come l'URL.

    Sqids include la lista nera predefinita che contiene le parole volgari e inappropriati più comuni in diverse lingue. Naturalmente puoi estendere quella lista nera con le tue parole.

  • Come funziona la lista nera?

    Il matching delle parole nella lista nera non fa distinzione tra maiuscole e minuscole.

    Parole brevi inferiori a 3 caratteri non saranno bloccate. Le parole di 3 caratteri devono corrispondere esattamente agli ID. Le parole di 4 caratteri o più lunghe attiveranno una corrispondenza se sono una sottostringa dell'ID.

    Se le parole nella lista nera contengono numeri (leetspeak), attiveranno una corrispondenza solo se sono all'inizio o alla fine dell'ID.

  • Quali parole sono nella lista nera predefinita?

    La lista nera predefinita contiene le parole volgari e inappropriate più comuni in diverse lingue. Puoi trovare l'elenco completo qui .

  • Cosa succede quando tutti gli ID sono bloccati?

    Quando l'ID generato corrisponde a una parola nella lista nera, la libreria tenta di rigenerarlo.

    Se ogni singolo tentativo fallisce nel rigenerare l'ID, la funzione di codifica fallirà e restituirà un errore. Gestire quell'errore spetta all'utente.

    Il modo migliore per ridurre il numero di tentativi di rigenerazione è avere un alfabeto più lungo, non impostare una lunghezza minima e fornire una lista nera più piccola. Fornire una lista nera vuota disabiliterà completamente la funzione.

  • Come verificare se gli ID sono validi?

    Decodificare gli ID produrrà di solito un qualche tipo di output numerico, ma ciò non significa necessariamente che l'ID sia canonico. Per verificare che l'ID sia valido, puoi ricodificare i numeri decodificati e verificare che corrispondano all'ID.

    Il motivo per cui questo non avviene automaticamente è che se la lista nera predefinita cambia in futuro, non vogliamo invalidare automaticamente l'ID che è stato generato in passato e potrebbe ora corrispondere a una nuova parola nella lista nera.

  • Cosa succede quando la lista nera predefinita viene aggiornata?

    Ci assicureremo di aggiornare il CHANGELOG quando e se la lista nera predefinita cambierà.

    Devi considerare scenari in cui potrebbe essere introdotta una nuova parola nella lista nera predefinita. In questo caso, la ricodifica dei numeri potrebbe produrre un ID diverso.

    Il modo migliore per garantire che i tuoi ID rimangano consistenti attraverso gli aggiornamenti futuri è fornire una lista nera personalizzata, anche se è identica alla lista nera predefinita attuale.

  • La codifica di numeri diversi può produrre ID identici?

    No, la codifica di numeri diversi produrrà ID univoci.

    Tuttavia, a causa del design dell'algoritmo, la decodifica di ID casuali talvolta può produrre gli stessi numeri. Il modo migliore per verificare se l'ID è canonico è semplicemente ricodificare i numeri decodificati e verificare che corrispondano all'ID.

  • Cos'è Hashids?

    Hashids è stata la prima versione di questa libreria che è uscita intorno al 2013. Ha anche prodotto ID brevi ma ha usato un metodo leggermente diverso.

  • Perché Hashids è stato aggiornato a Sqids?

    Hashids ha gestito alcune cose in modo diverso.

    Non supportava una lista nera personalizzata, ma si basava sulle parole volgari più comuni in inglese. Usava anche il parametro salt per mescolare l'alfabeto, il che lo rendeva un po' confuso perché la libreria non ha nulla a che fare con la crittografia. Inoltre, usava troppi caratteri riservati, il che risultava in ID più lunghi.

    Pertanto, abbiamo deciso di fare un upgrade e un rebranding. L'algoritmo è stato semplificato, sono state aggiunte alcune funzionalità e tutti i repository del codice sono sotto un unico tetto ora .

  • Perché il parametro salt è stato rimosso?

    Il parametro salt veniva utilizzato per mescolare l'alfabeto e non era mai stato pensato per essere associato a sicurezza o protezione. Entrambi Hashids e Sqids funzionano in modo simile al modo in cui funziona la conversione da decimale ad esadecimale, ma con alcune modifiche. Non c'è alcuna crittografia di alcun tipo, quindi per evitare confusione, quel parametro è stato completamente rimosso.

  • Hashids è compatibile con Sqids?

    No, Sqids espande la funzionalità di Hashids e ha obiettivi e requisiti di progettazione diversi; pertanto, gli ID generati non sono compatibili con Hashids.

  • Come posso aggiornare in modo sicuro da Hashids a Sqids?

    Poiché non c'è compatibilità tra Hashids e Sqids, è impossibile sostituire semplicemente Hashids con Sqids.

    Tuttavia, puoi unire i due differenziando a quale libreria appartiene ciascun ID.

    Uno dei modi per farlo è per lunghezza ID: se stai passando a Sqids, puoi fornire una lunghezza minima maggiore. Un altro modo è appendere/prependere manualmente un carattere personalizzato agli ID appena generati.

    Infine, potresti anche tentare di decodificare un ID con Hashids per vedere se è valido. Se no, decodifica e ricodifica con Sqids per vedere se funziona.

  • Dove posso trovare le librerie originali Hashids?

    Ciascuna implementazione del linguaggio su questo sito web collega al repository originale di Hashids se esiste.

  • Come posso contribuire?

    Se desideri supportare il progetto, apprezziamo se metti una stella ai nostri repository su Github per una maggiore visibilità.

    Se sei un programmatore e non vedi un'implementazione di Sqids per un particolare linguaggio, aiutaci a convertire la libreria. Lo stesso vale per un linguaggio di programmazione che non è elencato.

    Se vedi un bug nello spec o in una delle implementazioni, crea una issue o un pull request con una soluzione suggerita nel repository appropriato.

    Se parli più lingue, potremmo usare il tuo aiuto per raffinare la lista nera e aggiustare le traduzioni del sito web se vedi problemi.

    Infine, se hai un'esperienza con Hashids/Sqids, aiuta la nostra comunità rispondendo a qualsiasi domanda che qualcuno potrebbe avere.

  • Come portare Sqids in un'altra lingua?

    Se desideri portare Sqids a uno dei seguenti linguaggi (o a uno nuovo non elencato qui):

    D , Io , Raku , Smalltalk , T-SQL , Tcl , VBA

    Fai il fork del repository ufficiale nel tuo account Github e implementa lo spec insieme a tutti i test. Puoi riutilizzare uno qualsiasi dei README esistenti (esempio ).

    Una volta che la libreria è pronta, crea una pull request. Una volta unita, aggiorneremo il sito web.

    Se il repository non ha manutentori attivi, saremmo felici di invitarti a gestire il repository e diventare un manutentore ufficiale.