Sqids to niewielka, otwarta biblioteka, która może generować krótkie, unikalne identyfikatory wyglądające na losowe z liczb.
Najlepiej myśleć o tym jak o konwerterze dziesiętnym na szesnastkowy, ale z kilkoma dodatkowymi funkcjami.
Skracanie linków, generowanie unikalnych identyfikatorów zdarzeń do logowania, generowanie identyfikatorów dla produktów/obiektów na stronie internetowej (jak to robi YouTube dla filmów), generowanie krótkich identyfikatorów dla wiadomości tekstowych, kodów potwierdzających w e-mailach itp.
Dowolne dane, które są wrażliwe. Generowane identyfikatory nie są skrótami (haszami) i mogą być odkodowane z powrotem na liczby. Na przykład mogą nie być dobrym wyborem dla identyfikatorów użytkowników, ponieważ po odkodowaniu mogą ujawnić liczbę użytkowników Twojej aplikacji.
Tak. Sqids może zakodować jedną lub wiele liczb nieujemnych do jednego identyfikatora. Nie ma ograniczenia co do liczby liczb, które możesz zakodować, ale istnieje ograniczenie, jak dużą liczbę możesz zakodować (w zależności od języka implementacji).
Jest to przydatne z kilku powodów: możesz zakodować znacznik czasu UNIX i tworzyć identyfikatory wygasające, lub możesz zakodować numer fragmentu bazy danych razem z kluczem głównym i zaoszczędzić na dodatkowych zapytaniach do bazy danych.
Tak, wygenerowane identyfikatory są unikalne dla danego wejścia i alfabetu.
Pamiętaj jednak, że domyślny alfabet zawiera zarówno małe, jak i duże litery, więc domyślne identyfikatory są rozróżniające wielkość liter.
Sqids nie może zakodować liczb ujemnych.
Minimalna długość alfabetu to 3 znaków.
Alfabet nie może zawierać znaków wielobajtowych.
Sqids nie może generować identyfikatorów do określonej długości, jedynie co najmniej określonej długości. Zakres parametru minimalnej długości mieści się między 0 a 255.
Sqids może próbować odtworzyć identyfikatory do długości alfabetu minus jeden.
Biblioteka akceptuje niestandardowy alfabet, z którego można generować identyfikatory. Wystarczy wcześniej przetasować domyślny alfabet.
Proszę pamiętać, że przy wystarczających wysiłkach ktoś mógłby odtworzyć Twój przetasowany alfabet, więc nie jest to w żadnym wypadku technika ukrywania danych wrażliwych.
Domyślny alfabet można znaleźć tutaj .
Możesz użyć dowolnego narzędzia online do tasowania ciągów znaków lub naszego placu zabaw .
Zależy od Twojego przypadku użycia. Krótszy alfabet wygeneruje dłuższe identyfikatory, a dłuższy alfabet wygeneruje krótsze identyfikatory. Możesz użyć placu zabaw , aby sprawdzić, jak mogą wyglądać Twoje identyfikatory.
Tak. Pamiętaj, że wygenerowane identyfikatory są ciągami znaków i mogą zaczynać się od zera.
Nie. Sqids nie obsługuje znaków wielobajtowych dla alfabetu. Dotyczy to także emoji oraz wielu innych znaków.
Biblioteka może rozszerzać identyfikatory o znaki śmieciowe, aby wydawały się dłuższe. Jest to przydatne, aby nie było tak oczywiste, czy kodujesz małą liczbę jak 1, czy dużą liczbę jak 1000000.
Odkodowanie nie jest dotknięte.
Tak, biblioteka akceptuje parametr minimalnej długości, który gwarantuje, że identyfikatory będą miały przynajmniej taką długość.
Proszę zauważyć, że nie ma gwarancji, jak długie będą Twoje identyfikatory — tylko, że nie będą krótsze niż określona przez Ciebie długość.
Do pewnego stopnia.
Ustalenie maksymalnej długości jest niemożliwe, ponieważ wcześniej czy później Twoje identyfikatory przekroczą rozmiar przy dostatecznie dużym wejściu. Dlatego obsługiwany jest tylko parametr minimalnej długości, a dokładna długość lub maksymalna długość nie jest.
Lista blokowanych słów może zapobiec pojawianiu się pewnych słów w Twoich identyfikatorach. Jest to korzystne, ponieważ generowane identyfikatory mają pojawiać się w miejscach publicznych, takich jak adres URL.
Sqids zawiera domyślną listę blokowanych słów , która zawiera najbardziej podstawowe wulgaryzmy i nieodpowiednie słowa z kilku języków. Oczywiście możesz rozszerzyć tę listę blokowanych słów o własne słowa.
Porównywanie słów z listy blokowanych jest niezależne od wielkości liter.
Krótkie słowa krótsze niż 3 znaki nie będą blokowane. Słowa o długości 3 znaków muszą dokładnie pasować do identyfikatorów. Słowa o długości 4 znaków lub dłuższe spowodują dopasowanie, jeśli są podciągiem identyfikatora.
Jeśli słowa z listy blokowanych zawierają liczby (w języku przestępnym), dopasowanie następuje tylko wtedy, gdy znajdują się na początku lub na końcu identyfikatora.
Domyślna lista blokowanych słów zawiera najczęstsze wulgaryzmy i nieodpowiednie słowa z kilku języków. Pełną listę znajdziesz tutaj .
Jeśli wygenerowany identyfikator pasuje do słowa z listy blokowanych, biblioteka próbuje go odtworzyć.
Jeśli każda próba odtworzenia identyfikatora kończy się niepowodzeniem, funkcja kodowania zakończy się błędem. Obsługa tego błędu należy do użytkownika.
Najlepszym sposobem zmniejszenia liczby prób odtworzenia jest posiadanie dłuższego alfabetu, nieustawianie minimalnej długości i podanie mniejszej listy blokowanych słów. Podanie pustej listy blokowanych wyłączy tę funkcję całkowicie.
Odkodowywanie identyfikatorów zazwyczaj generuje jakiegoś rodzaju wynik liczbowy, ale to nie oznacza koniecznie, że identyfikator jest kanoniczny. Aby sprawdzić, czy identyfikator jest poprawny, możesz ponownie zakodować odkodowane liczby i sprawdzić, czy identyfikator się zgadza.
Powodem, dla którego to nie jest robione automatycznie, jest to, że jeśli domyślna lista blokowanych słów zmieni się w przyszłości, nie chcemy automatycznie unieważnić identyfikatora, który został wygenerowany w przeszłości i teraz może pasować do nowego słowa z listy blokowanych.
Upewnimy się, że zaktualizujemy CHANGELOG, kiedy i jeśli domyślna lista blokowanych słów ulegnie zmianie.
Musisz uwzględnić przypadki, gdy do domyślnej listy blokowanych słów może zostać wprowadzone nowe słowo. W takim przypadku ponowne kodowanie liczb może spowodować wygenerowanie innego identyfikatora.
Najlepszym sposobem zapewnienia spójności Twoich identyfikatorów podczas przyszłych aktualizacji jest dostarczenie niestandardowej listy blokowanych słów, nawet jeśli jest identyczna z aktualną domyślną listą blokowanych słów.
Nie, zakodowanie różnych liczb spowoduje wygenerowanie unikalnych identyfikatorów.
Jednakże, ze względu na sposób działania algorytmu, odkodowanie losowych identyfikatorów czasami może wygenerować te same liczby. Najlepszym sposobem sprawdzenia, czy identyfikator jest kanoniczny, jest po prostu ponowne zakodowanie odkodowanych liczb i sprawdzenie, czy identyfikator się zgadza.
Hashids był pierwszą wersją tej biblioteki, która pojawiła się około 2013 roku. Również generował krótkie identyfikatory, ale używał nieco innej metody.
Hashids obsługiwał kilka rzeczy inaczej.
Nie wspierał niestandardowej listy blokowanych słów, lecz polegał na najczęstszych angielskich wulgaryzmach. Wykorzystywał także parametr salt do przetasowywania alfabetu, co sprawiało pewne zamieszanie, ponieważ biblioteka nie miała nic wspólnego z szyfrowaniem. Dodatkowo używał zbyt wielu zarezerwowanych znaków, co skutkowało dłuższymi identyfikatorami.
W związku z tym postanowiliśmy dokonać ulepszenia i rebrandingu. Algorytm został uproszczony, dodano kilka funkcji, a wszystkie repozytoria kodu znajdują się teraz pod jednym adresem .
Parametr salt służył do przetasowywania alfabetu i nigdy nie miał związku z bezpieczeństwem. Zarówno Hashids, jak i Sqids działają podobnie do konwersji dziesiętnej na szesnastkową, ale z kilkoma dostosowaniami. Nie ma tu żadnego szyfrowania, dlatego w celu uniknięcia zamieszania ten parametr został całkowicie usunięty.
Nie, Sqids rozwija funkcjonalność Hashids i ma inne cele i wymagania projektowe; dlatego wygenerowane identyfikatory nie są kompatybilne z Hashids.
Ponieważ nie ma kompatybilności między Hashids a Sqids, niemożliwe jest po prostu zastąpienie Hashids przez Sqids.
Jednakże, możesz połączyć oba, różnicując, które identyfikatory należą do której biblioteki.
Jednym ze sposobów na to jest długość identyfikatora - jeśli przechodzisz na Sqids, możesz podać wyższą minimalną długość. Innym sposobem jest ręczne dodawanie/odrzucanie niestandardowego znaku do nowo wygenerowanych identyfikatorów.
Wreszcie, możesz także spróbować odkodować identyfikator za pomocą Hashids, aby sprawdzić, czy jest poprawny. Jeśli nie - odkoduj i zakoduj ponownie za pomocą Sqids, aby sprawdzić, czy to działa.
Każda implementacja językowa na tej stronie odnosi się do oryginalnego repozytorium Hashids, jeśli istnieje.
Jeśli chcesz wesprzeć projekt, będziemy wdzięczni za dodanie gwiazdki do naszych repozytoriów na Githubie, aby były bardziej widoczne.
Jeśli jesteś programistą i nie widzisz implementacji Sqids dla określonego języka, pomóż nam przekonwertować bibliotekę. To samo dotyczy języka programowania, który nie jest wymieniony.
Jeśli zauważysz błąd w specyfikacji lub którejkolwiek z implementacji, proszę utwórz problem lub żądanie przeciągnięcia z sugerowaną poprawką w odpowiednim repozytorium.
Jeśli znasz kilka języków, możemy potrzebować Twojej pomocy w dostosowaniu listy blokowanych słów i poprawie tłumaczeń na stronie , jeśli zauważysz jakieś problemy.
Wreszcie, jeśli masz doświadczenie z Hashids/Sqids, pomóż prowadzić naszą społeczność, odpowiadając na pytania, które mogą się pojawić.
Jeśli chcesz przenieść Sqids do jednego z poniższych języków (lub nowego, który nie jest tu wymieniony):
D , Io , Raku , Smalltalk , T-SQL , Tcl , VBA
Sforkuj oficjalne repozytorium na swoje konto Github i zaimplementuj specyfikację wraz z wszystkimi testami. Możesz ponownie wykorzystać któreś z istniejących plików README (przykład ).
Gdy biblioteka będzie gotowa, utwórz żądanie przeciągnięcia. Po scaleniu zaktualizujemy stronę internetową.
Jeśli repozytorium nie ma aktywnych opiekunów, chętnie zaprosimy Cię do zarządzania nim i zostania oficjalnym opiekunem.