• Vad är Sqids?

    Sqids är en liten open-source-bibliotek som kan producera korta, unika, slumpartade ID:n från nummer.

    Det bästa sättet att tänka på det är som en decimal-till-hexadecimalomvandlare, men med några extra funktioner.

  • Förkortning av länkar, generering av unika händelse-ID:n för loggning, generering av ID:n för produkter/objekt på en webbplats (som YouTube gör för videor), generering av korta ID:n för textmeddelanden, bekräftelsekoder i e-postmeddelanden, etc.

  • All data som är känslig. Genererade ID:n är inte hash-funktioner och kan avkodas tillbaka till nummer. Till exempel kan de kanske inte vara ett bra val för användar-ID:n, eftersom de, när de avkodas, kan avslöja antalet användare i din app.

  • Kan jag koda flera nummer samtidigt?

    Ja. Sqids kan koda ett eller många icke-negativa nummer till ett enda ID. Det finns ingen begränsning för hur många nummer du kan koda, men det finns en begränsning för hur stora nummer du kan koda (beroende på implementeringsspråket).

    Detta är användbart av flera anledningar: du kan koda en UNIX-timestamp och skapa förfallna ID:n, eller så kan du koda ett databasshardnummer tillsammans med en primärnyckel och spara extra databasförfrågningar.

  • Är genererade ID:n unika?

    Ja, genererade ID:n är unika för inmatningen och alfabetet.

    Kom ihåg att det förvalda alfabetet innehåller både versaler och gemener, så standard-ID:n är skiftlägeskänsliga.

  • Vilka begränsningar har Sqids?

    Sqids kan inte koda negativa nummer.

    Minsta alfabetets längd är 3 tecken.

    Alfabetet kan inte innehålla flerbytestecken.

    Sqids kan inte generera ID:n upp till en viss längd, endast åtminstone en viss längd. Parametern för minsta längd ligger mellan 0 och 255.

    Sqids kan försöka återskapa ID:n upp till alfabetets längd minus ett.

  • Hur kan jag göra mina ID:n unika?

    Biblioteket accepterar ett anpassat alfabet från vilket det kan generera ID:n. Bara förskuffa det förvalda alfabetet som tillhandahålls.

    Tänk på att med tillräckligt mycket ansträngning kan någon reversa ditt förskuffade alfabet, så detta är inte på något sätt en teknik för att dölja känslig data.

  • Hur kan jag blanda det förvalda alfabetet?

    Det förvalda alfabetet kan hittas här .

    Du kan använda vilket onlineverktyg för strängförskjutning som helst eller vår lekhage .

  • Är det bättre att använda ett kortare eller längre alfabet?

    Beror på ditt användningsfall. Ett kortare alfabet kommer att producera längre ID:n, och ett längre alfabet kommer att producera kortare ID:n. Du kan använda lekhage för att testa hur dina ID:n kan se ut.

  • Kan mitt alfabet bestå av bara siffror?

    Ja. Tänk på att genererade ID:n fortfarande är strängar och de kan börja med en nolla.

  • Kan jag använda emojis som alfabet?

    Nej. Sqids stöder inte flerbytestecken för alfabetet. Det inkluderar emojis och många andra tecken.

  • Varför fylla på ID:n?

    Biblioteket kan förlänga ID:n med skräptecken för att få dem att se längre ut. Detta är användbart så att det inte är lika uppenbart om du kodar ett litet nummer som 1 eller ett stort nummer som 1000000.

    Avkodning påverkas inte.

  • Kan jag göra genererade ID:n längre?

    Ja, biblioteket accepterar en parameter för minsta längd som garanterar att ID:n kommer att vara åtminstone den längden.

    Observera att det inte finns någon garanti för hur långa dina ID:n kommer att vara - bara att de inte blir kortare än den längd du specificerar.

  • Kan jag göra genererade ID:n till en specifik längd?

    Upp till en viss punkt.

    Att sätta maxlängd är omöjligt eftersom förr eller senare kommer dina ID:n att överbelastas med tillräckligt stor inmatning. Det är därför bara parametern för minsta längd som stöds, och den exakta längden eller maxlängden stöds inte.

  • Varför använda en blocklista?

    En blocklista kan förhindra att vissa ord visas i dina ID:n. Detta är fördelaktigt eftersom genererade ID:n är avsedda att visas på offentliga platser, som URL:er.

    Sqids kommer med standardblocklistan som innehåller de mest grundläggande svordomarna och olämpliga ord från flera språk. Du kan naturligtvis utöka den blocklistan med dina egna ord.

  • Hur fungerar blocklistan?

    Matchning av blocklistord är skiftlägesokänslig.

    Korta ord som är mindre än 3 tecken långa kommer inte att blockeras. Ord som är 3 tecken långa måste matcha ID:n exakt. Ord som är 4 tecken eller längre kommer att trigga en match om de är en delsträng av ID:t.

    Om blocklistords innehåller siffror (leetspeak) kommer de bara att trigga en match om de är i början eller slutet av ID:t.

  • Vilka ord finns i standardblocklistan?

    Standardblocklistan innehåller de vanligaste svordomarna och olämpliga orden från flera språk. Du kan hitta den fullständiga listan här .

  • Vad händer när alla ID:n är blockerade?

    När det genererade ID:t matchar ett ord i blocklistan försöker biblioteket att generera om det.

    Om varje enskilt försök att generera om ID:t misslyckas kommer kodningsfunktionen att misslyckas och returnera ett fel. Hanteringen av detta fel är upp till användaren.

    Det bästa sättet att minska antalet försök att generera om är att ha ett längre alfabet, inte sätta en minsta längd och tillhandahålla en mindre blocklista. Att tillhandahålla en tom blocklista kommer att inaktivera funktionen helt.

  • Hur kan jag kontrollera om ID:n är giltiga?

    Avkodning av ID:n kommer vanligtvis att producera någon form av numerisk utdata, men det betyder inte nödvändigtvis att ID:t är kanoniskt. För att kontrollera att ID:t är giltigt kan du återkoda avkodade nummer och kontrollera att ID:t matchar.

    Anledningen till att detta inte görs automatiskt är att om standardblocklistan ändras i framtiden vill vi inte automatiskt ogiltigförklara ID:t som har genererats tidigare och kanske nu matchar ett nytt blocklistord.

  • Vad händer när standardblocklistan uppdateras?

    Vi kommer säkerställa att CHANGELOG uppdateras om och när standardblocklistan ändras.

    Du måste ta hänsyn till scenarier där ett nytt ord kan införas i standardblocklistan. I det här fallet kan återkodning av nummer producera ett annorlunda ID.

    Det bästa sättet att säkerställa att dina ID:n förblir konsekventa genom framtida uppdateringar är att tillhandahålla en anpassad blocklista, även om den är identisk med den aktuella standardblocklistan.

  • Kan kodning av olika nummer producera identiska ID:n?

    Nej, kodning av olika nummer kommer att producera unika ID:n.

    Men på grund av algoritmens design kan avkodning av slumpmässiga ID:n ibland producera samma nummer. Det bästa sättet att kontrollera om ID:t är kanoniskt är att helt enkelt återkoda avkodade nummer och kontrollera att ID:t matchar.

  • Vad är Hashids?

    Hashids var den första versionen av detta bibliotek som kom ut runt 2013. Den producerade också korta ID:n men använde en något annorlunda metod.

  • Varför uppgraderades Hashids till Sqids?

    Hashids hanterade några saker annorlunda.

    Den stödde inte en anpassad blocklista, utan förlitade sig istället på de vanligaste engelska svordomarna. Den använde också parameter salt för att blanda alfabetet vilket gjorde det lite förvirrande eftersom biblioteket inte har något att göra med kryptering. Dessutom användes för många reserverade tecken vilket resulterade i längre ID:n.

    Därför har vi beslutat att uppgradera och ge nytt namn. Algoritmen har förenklats, några funktioner har lagts till och kodlagrarna finns nu allihop under ett tak .

  • Varför togs salt-parametern bort?

    Parametern salt användes för att blanda alfabetet, och den var aldrig menad att associeras med säkerhet eller trygghet. Både Hashids och Sqids fungerar på ett liknande sätt som omvandling från decimal till hexadecimal men med några justeringar. Det finns ingen form av kryptering, så för att undvika förvirring har den parametern tagits bort helt och hållet.

  • Är Hashids kompatibelt med Sqids?

    Nej, Sqids utökar funktionaliteten hos Hashids och har olika designmål och krav; därför är de genererade ID:na inte kompatibla med Hashids.

  • Hur kan jag säkert uppgradera från Hashids till Sqids?

    Eftersom det inte finns någon kompatibilitet mellan Hashids och Sqids är det omöjligt att helt enkelt ersätta Hashids med Sqids.

    Du kan dock sammanföra de två genom att skilja vilket ID som tillhör vilket bibliotek.

    Ett sätt att göra det är genom ID-längd - om du byter till Sqids kan du ange en högre minsta längd. Ett annat sätt är att manuellt lägga till en anpassad teckensträng till de nygenererade ID:na.

    Slutligen kan du också försöka avkoda ett ID med Hashids för att se om det är giltigt. Om inte - avkoda och koda om med Sqids för att se om det fungerar.

  • Var kan jag hitta de ursprungliga Hashids-biblioteken?

    Varje språkimplementation på denna webbplats länkar till den ursprungliga Hashids-lagringsplatsen om den finns.

  • Hur kan jag bidra?

    Om du vill stödja projektet skulle vi uppskatta om du stjärnmarkerade våra lagringsplatser på Github för att få mer synlighet.

    Om du är utvecklare och inte ser någon implementation av Sqids för ett specifikt språk, hjälp oss att konvertera biblioteket. Samma sak gäller för ett programmeringsspråk som inte är listat.

    Om du ser en bugg i specifikationen eller någon av implementationerna, skapa gärna en fråga eller en begäran om ändring med ett föreslaget fix i den lämpliga lagringsplatsen.

    Om du talar flera språk kan vi använda din hjälp med finjustering av blocklistan och justering av webbplatstranslationer om du ser några problem.

    Slutligen, om du har erfarenhet av Hashids/Sqids, var god hjälp till att guida vår community genom att svara på eventuella frågor som någon kan ha.

  • Hur portar jag Sqids till ett annat språk?

    Om du vill portera Sqids till ett av följande språk (eller ett nytt som inte listas här):

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

    Forka den officiella lagringsplatsen till ditt eget Github-konto och implementera specifikationen tillsammans med alla tester. Du kan återanvända någon av de befintliga README-filerna (exempel ).

    När biblioteket är klart, skapa en begäran om ändring. När den har införlivats kommer vi att uppdatera webbplatsen.

    Om lagringsplatsen inte har några aktiva underhållare skulle vi vara glada att bjuda in dig för att hantera lagringsplatsen och bli en officiell underhållare.