• Wat is Sqids?

    Sqids is een kleine open-source bibliotheek die korte, unieke, willekeurig uitziende ID's kan genereren uit getallen.

    De beste manier om erover na te denken is als een decimaal-naar-hexadecimaal omzetter, maar met een paar extra functies.

  • Link verkorten, het genereren van unieke gebeurtenis-ID's voor logboekregistratie, het genereren van ID's voor producten/objecten op een website (zoals YouTube doet voor video's), het genereren van korte ID's voor tekstberichten, bevestigingscodes in e-mails, enz.

  • Alle gevoelige data. Gegenereerde ID's zijn geen hashes en kunnen terug gedecodeerd worden naar getallen. Bijvoorbeeld, ze zijn misschien geen goede keuze voor gebruikers-ID's, omdat ze, eenmaal gedecodeerd, het aantal gebruikers van je app kunnen onthullen.

  • Kan ik meerdere nummers tegelijk coderen?

    Ja. Sqids kan één of meerdere niet-negatieve getallen encoderen in één ID. Er is geen limiet aan het aantal getallen dat je kunt encoderen, maar er is wel een limiet aan hoe groot een getal kan zijn dat je kunt encoderen (afhankelijk van de implementatietalen).

    Dit is om verschillende redenen nuttig: je zou een UNIX-tijdstempel kunnen encoderen en vervaldatum-ID's kunnen maken, of je zou een database shard-nummer samen met een primaire sleutel kunnen encoderen en besparen op extra databasequery's.

  • Zijn gegenereerde ID's uniek?

    Ja, gegenereerde ID's zijn uniek voor de invoer en het alfabet.

    Houd er wel rekening mee dat het standaard alfabet zowel hoofdletters als kleine letters bevat, dus standaard ID's zijn hoofdlettergevoelig.

  • Welke beperkingen heeft Sqids?

    Sqids kan geen negatieve getallen encoderen.

    De minimale alfabetlengte is 3 tekens.

    Het alfabet mag geen meertekenreeks tekens bevatten.

    Sqids kan geen ID's genereren tot een bepaalde lengte, alleen minstens een bepaalde lengte. Het bereik van de minimumlengteparameter ligt tussen 0 en 255.

    Sqids kan proberen ID's te regenereren tot de lengte van het alfabet, min één.

  • Hoe kan ik mijn ID's uniek maken?

    De bibliotheek accepteert een aangepast alfabet waaruit het ID's kan genereren. Schud eenvoudig het standaard alfabet dat wordt meegeleverd.

    Houd er rekening mee dat iemand met voldoende inspanning je geschudde alfabet zou kunnen reverse-engineeren, dus dit is geenszins een techniek om gevoelige gegevens te verbergen.

  • Hoe kan ik het standaard alfabet schudden?

    Het standaard alfabet is te vinden hier .

    Je kunt een van de online tools voor tekenreeks-shuffling gebruiken of onze speeltuin .

  • Is het beter om een korter of langer alfabet te gebruiken?

    Afhankelijk van je gebruik. Een korter alfabet zal langere ID's produceren, en een langer alfabet zal kortere ID's produceren. Je kunt de speeltuin gebruiken om te testen hoe je ID's eruit zouden kunnen zien.

  • Kan mijn alfabet alleen uit nummers bestaan?

    Ja. Houd er rekening mee dat gegenereerde ID's nog steeds tekenreeksen zijn en dat ze met een nul kunnen beginnen.

  • Kan ik emoji's als alfabet gebruiken?

    Nee. Sqids ondersteunt geen meertekenreeks tekens voor het alfabet. Dat geldt ook voor emoji's en veel andere tekens.

  • Waarom ID's opvullen?

    De bibliotheek kan ID's uitbreiden met overbodige tekens om ze langer te laten lijken. Dit is handig, zodat het niet zo duidelijk is of je een klein getal zoals 1 of een groot getal zoals 1000000 codeert.

    Decoderen wordt hierdoor niet beïnvloed.

  • Kan ik gegenereerde ID's langer maken?

    Ja, de bibliotheek accepteert een parameter voor de minimale lengte die garandeert dat ID's minstens die lengte hebben.

    Houd er rekening mee dat er geen garantie is hoe lang je ID's zullen zijn, alleen dat ze niet korter zullen zijn dan de door jou opgegeven lengte.

  • Kan ik gegenereerde ID's een specifieke lengte geven?

    Tot op zekere hoogte.

    Het instellen van een maximale lengte is onmogelijk omdat vroeg of laat je ID's zullen overlopen bij een grote genoeg invoer. Daarom wordt alleen de minimumlengteparameter ondersteund en wordt de exacte lengte of maximale lengte niet ondersteund.

  • Waarom een blocklist gebruiken?

    Een blocklist kan voorkomen dat bepaalde woorden in je ID's verschijnen. Dit is nuttig omdat gegenereerde ID's bedoeld zijn om op openbare plaatsen te verschijnen, zoals de URL.

    Sqids wordt geleverd met de standaard blocklist die de meest basis schunnige en ongepaste woorden uit verschillende talen bevat. Je kunt die blocklist natuurlijk uitbreiden met je eigen woorden.

  • Hoe werkt de blocklist?

    Woorden in de blocklist worden niet hoofdlettergevoelig gematcht.

    Korte woorden van minder dan 3 tekens lang zullen niet worden geblokkeerd. Woorden van 3 tekens lang moeten precies overeenkomen met ID's. Woorden van 4 tekens of langer zullen een match veroorzaken als ze een subreeks zijn van de ID.

    Als blocklistwoorden cijfers bevatten (leet speak), zullen ze alleen een match veroorzaken als ze aan het begin of het einde van de ID staan.

  • Welke woorden staan er in de standaard blocklist?

    De standaard blocklist bevat de meest voorkomende schunnige en ongepaste woorden uit verschillende talen. Je kunt de volledige lijst hier vinden.

  • Wat gebeurt er als alle ID's geblokkeerd zijn?

    Wanneer de gegenereerde ID overeenkomt met een woord in de blocklist, probeert de bibliotheek deze opnieuw te genereren.

    Als elke poging om de ID opnieuw te genereren mislukt, zal de encode-functie falen en een foutmelding teruggeven. Het is aan de gebruiker om met die foutmelding om te gaan.

    De beste manier om het aantal pogingen tot regeneratie te verminderen is door een langer alfabet te hebben, geen minimumlengte in te stellen, en een kleinere blocklist te gebruiken. Het gebruik van een lege blocklist schakelt de functie volledig uit.

  • Hoe kan ik controleren of ID's geldig zijn?

    Decoderen van ID's zal meestal enige vorm van numerieke output opleveren, maar dat betekent niet noodzakelijkerwijs dat de ID canoniek is. Om te controleren of de ID geldig is, kun je gedecodeerde getallen opnieuw encoderen en controleren of de ID overeenkomt.

    De reden waarom dit niet automatisch wordt gedaan, is dat als de standaard blocklist in de toekomst verandert, we niet automatisch de ID willen ongeldig maken die in het verleden is gegenereerd en mogelijk nu overeenkomt met een nieuw blocklistwoord.

  • Wat gebeurt er als de standaard blocklist wordt bijgewerkt?

    We zullen er zeker van zijn om de CHANGELOG bij te werken als en wanneer de standaard blocklist verandert.

    Je moet rekening houden met scenario's waarin een nieuw woord aan de standaard blocklist kan worden toegevoegd. In dat geval kan het opnieuw encoderen van getallen een andere ID opleveren.

    De beste manier om ervoor te zorgen dat je ID's consistent blijven bij toekomstige updates, is door een aangepaste blocklist te gebruiken, zelfs als die identiek is aan de huidige standaard blocklist.

  • Kan het coderen van verschillende nummers identieke ID's produceren?

    Nee, het encoderen van verschillende getallen zal unieke ID's opleveren.

    Echter, vanwege het ontwerp van het algoritme kan het decoderen van willekeurige ID's soms dezelfde getallen produceren. De beste manier om te controleren of de ID canoniek is, is door simpelweg gedecodeerde getallen opnieuw te encoderen en te controleren of de ID overeenkomt.

  • Wat is Hashids?

    Hashids was de eerste versie van deze bibliotheek die rond 2013 uitkwam. Het produceerde ook korte ID's maar gebruikte een iets andere methode.

  • Waarom is Hashids geüpgraded naar Sqids?

    Hashids behandelde een paar dingen anders.

    Het ondersteunde geen aangepaste blocklist, maar vertrouwde in plaats daarvan op de meest voorkomende Engelse scheldwoorden. Het gebruikte ook de salt-parameter om het alfabet te schudden wat het een beetje verwarrend maakte omdat de bibliotheek niets met encryptie te maken heeft. Bovendien gebruikte het te veel gereserveerde tekens, waardoor langere ID's werden geproduceerd.

    Daarom hebben we besloten te upgraden en opnieuw te branden. Het algoritme is vereenvoudigd, er zijn een paar functies toegevoegd en de code repositories zijn nu allemaal onder één dak .

  • Waarom is de salt parameter verwijderd?

    De salt-parameter werd gebruikt om het alfabet te schudden, en het was nooit bedoeld om geassocieerd te worden met veiligheid of beveiliging. Zowel Hashids als Sqids werken op een vergelijkbare manier als de omzetting van decimaal naar hexadecimaal, maar met een paar aanpassingen. Er is geen enkele vorm van encryptie, dus om verwarring te voorkomen, is die parameter volledig verwijderd.

  • Is Hashids compatibel met Sqids?

    Nee, Sqids breidt de functionaliteit van Hashids uit en heeft verschillende ontwerpdoelen en vereisten; daarom zijn gegenereerde ID's niet compatibel met Hashids.

  • Hoe kan ik veilig upgraden van Hashids naar Sqids?

    Omdat er geen compatibiliteit is tussen Hashids en Sqids, is het onmogelijk om eenvoudig Hashids te vervangen door Sqids.

    Je kunt echter de twee samenvoegen door te differentiëren welke ID bij welke bibliotheek hoort.

    Een van de manieren om dat te doen, is op ID-lengte - als je overschakelt naar Sqids, kun je een hogere minimale lengte opgeven. Een andere manier is om handmatig een aangepast teken toe te voegen/vooraf toe te voegen aan de nieuw gegenereerde ID's.

    Tenslotte kun je ook proberen een ID te decoderen met Hashids om te zien of het geldig is. Zo niet - decodeer en codeer opnieuw met Sqids om te zien of dat werkt.

  • Waar kan ik de originele Hashids-bibliotheken vinden?

    Elke taalimplementatie op deze website linkt naar de originele Hashids-repository als die bestaat.

  • Hoe kan ik bijdragen?

    Als je het project wilt ondersteunen, waarderen we het als je onze repos op Github een ster geeft voor meer zichtbaarheid.

    Als je een ontwikkelaar bent en geen implementatie van Sqids ziet voor een bepaalde taal, help ons dan om de bibliotheek om te zetten. Hetzelfde geldt voor een programmeertaal die niet wordt vermeld.

    Als je een fout ziet in de specificatie of een van de implementaties, maak dan een issue of een pullverzoek aan met een voorgestelde fix in de juiste repository.

    Als je meerdere talen spreekt, kunnen we je hulp gebruiken bij het verfijnen van de blocklist en het aanpassen van websitevertalingen als je problemen ziet.

    Als je ervaring hebt met Hashids/Sqids, help dan onze gemeenschap te begeleiden door vragen van anderen te beantwoorden.

  • Hoe Sqids naar een andere taal porten?

    Als je Sqids wilt omzetten naar een van de volgende talen (of een nieuwe die hier niet wordt vermeld):

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

    Fork de officiële repo naar je eigen Github-account & implementeer de specificatie samen met alle tests. Je kunt een van de bestaande README's hergebruiken (voorbeeld ).

    Zodra de bibliotheek klaar is, maak je een pullverzoek. Zodra samengevoegd, zullen we de website bijwerken.

    Als de repo geen actieve beheerders heeft, nodigen we je graag uit om de repo te beheren en een officiële beheerder te worden.