ULID જનરેટર

ઓનલાઇન ULID જનરેટ કરો: 26-અક્ષરોના Crockford Base32 IDs, જેમાં 48-બિટ સમય અને 80 રેન્ડમ બિટ્સ હોય છે.

ફોર્મેટ
જનરેટ કરેલ ID
તૈયાર છે. તમારા બ્રાઉઝરમાં ULIDs જનરેટ કરો.

આ ID કેવી રીતે બને છે

લેઆઉટ
26 Crockford Base32 અક્ષરો: 10 સમયના અક્ષરો અને ત્યારબાદ 16 રેન્ડમ અક્ષરો.
એન્ટ્રોપી
48-બિટ મિલિસેકન્ડ ટાઇમસ્ટેમ્પ પછી 80 રેન્ડમ બિટ્સ.
સમય
હા. પ્રથમ 10 અક્ષરો મિલિસેકન્ડ સમયને એન્કોડ કરે છે, અને લેક્સિકલ ક્રમ સમયને અનુસરે છે.
કોલિઝનનું જોખમ
રેન્ડમ ટેઇલ 80 બિટ્સ ધરાવે છે; જોખમ મુખ્યત્વે એ બાબત પર છે કે તમે સમાન મિલિસેકન્ડમાં કેટલા IDs બનાવો છો.
ઉદાહરણ
01M12BRPSVXNS1Q1GTMJCRK1JD

તમારા ID મજબૂત બ્રાઉઝર રેન્ડમનેસ સાથે સ્થાનિક રીતે જનરેટ થાય છે. BroBroGo પર કંઈપણ મોકલવામાં આવતું નથી.

વારંવાર પૂછાતા પ્રશ્નો (FAQ)

ULID શેના માટે ઉપયોગી છે?

ULID કોમ્પેક્ટ, URL-ફ્રેન્ડલી અને પ્લેન ટેક્સ્ટ તરીકે ટાઇમ-સોર્ટેબલ છે, જે લોગ્સ, ઓબ્જેક્ટ કી અને ક્રિએશન સમય દ્વારા સોર્ટ કરવાના રેકોર્ડ્સ માટે ઉપયોગી છે.

શું ULID અને UUID v7 સમાન છે?

ના. બંનેમાં મિલિસેકન્ડ સમય શામેલ છે, પરંતુ ULID એ Crockford Base32 અને 26 અક્ષરોનો ઉપયોગ કરે છે, જ્યારે UUID v7 સ્ટાન્ડર્ડ UUID હેક્સાડેસિમલ ફોર્મેટ જાળવી રાખે છે.

ULID જનરેટર પેજ – સંપૂર્ણ માર્ગદર્શિકા

ULID શું છે? તે એક ૨૬-કેરેક્ટરની ઓળખકર્તા સ્ટ્રિંગ છે જે ફક્ત Crockford’s base32 અક્ષરમાળાનો ઉપયોગ કરે છે. આ પેજ પર તમે ULID ફોર્મેટ પસંદ કરી, ૧ થી ૧૦૦ સુધીની કોઈપણ સંખ્યામાં IDs જનરેટ કરી શકો છો. દરેક ID તરત જ તૈયાર થઈ જાય છે અને તમે તેને એક પછી એક અથવા બધી એકસાથે કૉપિ કરી શકો છો.

ULIDની સૌથી મોટી ખાસિયત એ છે કે તે UUID (જે ૩૬ કેરેક્ટર લાંબો હોય છે) કરતાં ટૂંકો છે – માત્ર ૨૬ કેરેક્ટર. તેમાં કોઈ હાઇફન નથી, અને તે કેસ-ઇનસેન્સિટિવ છે, એટલે કે “ABCD” અને “abcd” સમાન ગણાય છે. પ્રથમ ૧૦ કેરેક્ટર એક મિલિસેકન્ડ-પ્રિસિઝન ટાઇમસ્ટેમ્પ છે, જેના કારણે ULIDsને સમય અનુસાર ક્રમ (lexicographically sortable) માં ગોઠવી શકાય છે. બાકીના ૧૬ કેરેક્ટર (૮૦ બિટ) સંપૂર્ણપણે રેન્ડમ હોય છે. કુલ મળીને અંદર ૧૨૮ બિટની માહિતી હોય છે.

આ પેજમાં ULID માટે અપરકેસ/લોઅરકેસ અથવા હાઇફનના કોઈ ટૉગલ નથી, કારણ કે ULID પોતે જ કેસ-ઇનસેન્સિટિવ છે અને તેમાં હાઇફન હોતા જ નથી. જો તમે ફોર્મેટ બદલો કે કાઉન્ટ બદલો, તો આપમેળે નવી યાદી જનરેટ થઈ જાય છે.


ULIDનું આંતરિક માળખું – ટાઇમસ્ટેમ્પ અને રેન્ડમ કમ્પોનન્ટ

ULIDમાં ૧૨૮ બિટની જગ્યા હોય છે, જે બે ભાગમાં વહેંચાયેલી છે:

  • ટાઇમસ્ટેમ્પ (પ્રથમ ૧૦ કેરેક્ટર – ૪૮ બિટ): આ ભાગ મિલિસેકન્ડમાં યુનિક્સ ટાઇમ (Unix time) સ્ટોર કરે છે. એટલે કે જ્યારે પણ ID જનરેટ થાય, તેનો સમય આમાં કેદ થઈ જાય છે. આ ટાઇમસ્ટેમ્પ ૧૦ કેરેક્ટરમાં Crockford’s base32 દ્વારા એન્કોડ થાય છે, જેના કારણે ULIDsને એકબીજા સાથે સરખાવીને (lexicographically) સૉર્ટ કરી શકાય છે.

  • રેન્ડમ કમ્પોનન્ટ (બાકીના ૧૬ કેરેક્ટર – ૮૦ બિટ): આ ભાગ crypto.getRandomValues() દ્વારા બ્રાઉઝરમાં જ સ્થાનિક રીતે જનરેટ થાય છે. તેનાથી દરેક ID અનન્ય (unique) બને છે, એક જ મિલિસેકન્ડમાં પણ.

એક ઉદાહરણ લઈએ:
ધારો કે ટાઇમસ્ટેમ્પ ભાગ “01BX5ZZB” (૮ કેરેક્ટર) અને રેન્ડમ ભાગ “ABCDEFGHIJ123456” (૧૬ કેરેક્ટર) છે, તો સંપૂર્ણ ULID થશે: 01BX5ZZBABCDEFGHIJ123456 (કુલ ૨૬ કેરેક્ટર). પણ યાદ રાખો, પ્રથમ ૧૦ કેરેક્ટર ટાઇમસ્ટેમ્પ છે, તેથી ઉપરના ઉદાહરણમાં ટાઇમસ્ટેમ્પ “01BX5ZZB” નથી, પણ “01BX5ZZBAB” (૧૦ કેરેક્ટર) હશે.

આ માળખું ખાસ કરીને ડેટાબેઝમાં પ્રાથમિક કી (primary key) તરીકે ઉપયોગી છે, કારણ કે નવી IDs લગભગ હંમેશા મોટી (increasing) હોય છે, જે B-tree ઇન્ડેક્સમાં દાખલ કરવા માટે અનુકૂળ છે. સંપૂર્ણ રેન્ડમ UUID (જેમ કે UUID v4) સાથે ઘણી વખત ઇન્ડેક્સ ફ્રેગમેન્ટેશન થાય છે, પણ ULID આ સમસ્યા ટાળે છે.


Crockford base32 એન્કોડિંગ શા માટે મહત્વપૂર્ણ છે?

ULID Crockford’s base32 નામના અક્ષરમાળાનો ઉપયોગ કરે છે. આ અક્ષરમાળામાં ફક્ત આ કેરેક્ટર હોય છે:
0-9, A-Z (પણ I, L, O, U અક્ષરોને બાકાત રાખવામાં આવ્યા છે).

આના બે મોટા ફાયદા છે:

૧. કેસ-ઇનસેન્સિટિવિટી: “A” અને “a” બંનેને એકસરખું ગણવામાં આવે છે. એટલે કે તમે ભૂલથી પણ કોઈ ID લોઅરકેસમાં લખો તો તે કામ કરશે. આ UUIDની તુલનામાં મોટી સરળતા છે, કારણ કે UUIDમાં અપરકેસ અને લોઅરકેસમાં ફરક પડે છે.

૨. દૃષ્ટિગત અસ્પષ્ટતા દૂર થાય છે: I (i), L (l), O (o), U (u) જેવા અક્ષરોને દૂર કરી દેવામાં આવ્યા છે, કારણ કે તે સંખ્યા 1, 0, અને ૦ સાથે ગૂંચવાઈ શકે છે. ઉદાહરણ તરીકે, મોટાક્ષર “I” (i) અને નાનાક્ષર “l” (L) ઘણા ફોન્ટમાં સરખા દેખાય છે. Crockford base32માં આ સમસ્યા નથી.

આ અક્ષરમાળા RFC 3986 પ્રમાણે બધા જ કેરેક્ટર અનરિઝર્વ્ડ (unreserved) છે, એટલે કે ULIDને URLમાં ડાયરેક્ટ મૂકી શકાય છે – કોઈ પર્સેન્ટ-એન્કોડિંગ (જેમ કે %20)ની જરૂર નથી.


UUID v4 અને UUID v7 સાથે સરખામણી

લક્ષણ ULID UUID v4 UUID v7
લંબાઈ 26 કેરેક્ટર 36 કેરેક્ટર (4 હાઇફન સાથે) 36 કેરેક્ટર
ટાઇમ-સૉર્ટેબલ? હા (મિલિસેકન્ડ) ના (સંપૂર્ણ રેન્ડમ) હા (મિલિસેકન્ડ)
કેસ-ઇનસેન્સિટિવ? હા ના (mIxEd cAsE) ના
હાઇફન? ના હા (દર 8-4-4-4-12) હા
URL-સેફ? હા (બધા કેરેક્ટર અનરિઝર્વ્ડ) પર્સેન્ટ-એન્કોડિંગ જરૂરી પર્સેન્ટ-એન્કોડિંગ જરૂરી
અંદરનો ડેટા 10 chars ટાઇમ + 16 chars રેન્ડમ 128 બિટ રેન્ડમ 48 બિટ ટાઇમ + 74 બિટ રેન્ડમ + 6 બિટ વેરિઅન્ટ

ULID અને UUID v7 બંને ટાઇમ-સૉર્ટેબલ છે, પણ ULID ટૂંકો છે અને કેસ-ઇનસેન્સિટિવ છે. UUID v7 હજુ પણ 36 કેરેક્ટરનો છે અને તેમાં હાઇફન અને કેસ-સેન્સિટિવિટી છે. જો તમારે ટૂંકી, માનવ-વાંચવા યોગ્ય અને URL-સેફ IDની જરૂર હોય તો ULID સારો વિકલ્પ છે.


સૉર્ટિંગ વર્તણૂક અને ઘડિયાળ-આધારિત ક્રમ

ULIDનો સૌથી મોટો ફાયદો એ છે કે તે lexicographically sortable છે. જો તમારી પાસે બે ULIDs હોય:

01BX5ZZBABCDEFGHIJ123456 (પહેલા જનરેટ થયેલ)
01BX6ZZBABCDEFGHIJ123456 (બીજા જનરેટ થયેલ)

તો સ્ટ્રિંગ તરીકે સરખાવવાથી પણ તમે જાણી શકો છો કે કયો પહેલા જનરેટ થયો. કારણ કે ટાઇમસ્ટેમ્પ પ્રથમ ૧૦ કેરેક્ટરમાં છે, અને તે સમય વધારે થતાં સાથે મોટા થતા જાય છે.

પરંતુ એક મહત્વની મર્યાદા છે: એક જ મિલિસેકન્ડમાં જનરેટ થયેલા બે ULIDs માટે સખત ક્રમ (strict ordering) ગેરંટીડ નથી. કારણ કે ટાઇમસ્ટેમ્પ તો સરખો જ હશે, પણ રેન્ડમ ભાગ કોઈપણ ક્રમમાં આવી શકે છે. એટલે કે એક જ સમયે બનેલા બે ULIDsને તમે સમય અનુસાર ગોઠવી શકતા નથી – તેમનો ક્રમ સંપૂર્ણપણે રેન્ડમ રહેશે.

જો તમારે આ સમસ્યા ટાળવી હોય, તો તમારે અલગથી ટાઇમસ્ટેમ્પ કોલમ રાખવો પડશે અથવા ULIDને બદલે અન્ય ફોર્મેટ (જેમ કે કાઉન્ટર-આધારિત ID) વિચારી શકો છો.


કોલિશન સંભાવના અને બ્રાઉઝરમાં જનરેશન

ULIDના રેન્ડમ ભાગમાં ૮૦ બિટ હોય છે. એટલે કે કુલ 2^80 (લગભગ 1.2 × 10^24) સંભવિત રેન્ડમ મૂલ્યો છે. જો તમે એક મિલિસેકન્ડમાં ૧૦૦ IDs (મહત્તમ મર્યાદા) જનરેટ કરો, તો પણ બે સરખા IDs મળવાની સંભાવના અત્યંત ઓછી છે. ગણિતીય રીતે, એક મિલિસેકન્ડમાં ૧૦૦ IDs સાથે કોલિશનની સંભાવના લગભગ (100^2)/(2*2^80) ≈ 10^-22 જેટલી છે – જે વ્યવહારિક રીતે અવગણી શકાય તેટલી.

બધી ID જનરેશન તમારા બ્રાઉઝરમાં જ થાય છે, સર્વર પર નહીં. આ માટે JavaScriptનો crypto.getRandomValues() API વપરાય છે, જે ઓપરેટિંગ સિસ્ટમના ક્રિપ્ટોગ્રાફિક રેન્ડમ નંબર જનરેટરનો ઉપયોગ કરે છે. આનો અર્થ એ છે કે:

  • તમારો ડેટા ક્યારેય ઇન્ટરનેટ પર નથી મોકલાતો.
  • કોઈ તૃતીય પક્ષ (third party) તમારી જનરેટ થયેલી IDs જોઈ શકતું નથી.
  • ID જનરેટ કરવા માટે ઈન્ટરનેટ કનેક્શનની જરૂર નથી.

આ **ગોપનીયતા (privacy)**ના દૃષ્ટિકોણથી ખૂબ મહત્વપૂર્ણ છે, ખાસ કરીને જો તમે સંવેદનશીલ ડેટા માટે IDs જનરેટ કરતા હોવ.


URL સલામતી અને એસ્કેપિંગથી મુક્તિ

ઘણા ઓળખકર્તા ફોર્મેટમાં એવા કેરેક્ટર હોય છે જે URLમાં સીધા ન વાપરી શકાય. ઉદાહરણ તરીકે, સ્ટાન્ડર્ડ UUIDમાં હાઇફન હોય છે, જે URLમાં કોઈ સમસ્યા પેદા કરતા નથી, પણ જો તમે UUIDને URLના ભાગ તરીકે વાપરો, તો કેટલાક કેરેક્ટર (જેમ કે +, /, =) ટકા-એન્કોડિંગ (percent-encoding) દ્વારા લખવા પડે છે.

ULIDમાં આ સમસ્યા નથી. Crockford base32ના બધા જ કેરેક્ટર RFC 3986 અનુસાર અનરિઝર્વ્ડ છે. એટલે કે ULIDને તમે URLમાં સીધા જ મૂકી શકો છો, જેમ કે:

https://example.com/users/01BX5ZZBABCDEFGHIJ123456

કોઈ ટકા-એન્કોડિંગ, કોઈ બેકસ્લેશ, કોઈ વધારાનું મેનિપ્યુલેશન નહીં. આ API ડિઝાઇનમાં ઘણું મદદરૂપ છે.


FAQ – વારંવાર પૂછાતા પ્રશ્નો

૧. શું ULID સંપૂર્ણપણે અનોખા હોય છે?
તે અત્યંત ઓછી સંભાવના સાથે અનોખા હોય છે. ૮૦-બિટ રેન્ડમ ભાગને કારણે, એક મિલિસેકન્ડમાં ૧૦૦ IDs જનરેટ કરવા છતાં કોલિશનની સંભાવના 10^-22 કરતાં ઓછી છે. વ્યવહારિક રીતે તે શક્ય નથી.

૨. ULID કેટલો સમય (timestamp) સ્ટોર કરી શકે છે?
૪૮-બિટ ટાઇમસ્ટેમ્પ લગભગ વર્ષ ૧૦૮૮૯ સુધી મિલિસેકન્ડ-સ્તરનો સમય સ્ટોર કરી શકે છે. એટલે કે આવનારા હજારો વર્ષો સુધી તે વાપરી શકાય છે.

૩. શું હું ULIDને UUIDમાં કન્વર્ટ કરી શકું?
હા, પરંતુ તેનાથી ULIDના ટાઇમ-સૉર્ટિંગ ફાયદા ખતમ થઈ જશે. ULID અને UUIDમાં માત્ર બિટ-લેવલ પર સમાન લંબાઈ (૧૨૮ બિટ) છે, પણ ડેટા સ્ટ્રક્ચર અલગ છે. કન્વર્ઝન શક્ય છે, પણ તે વ્યવહારિક રીતે ઉપયોગી નથી.

૪. શું ULID કોઈ ઓપન સ્ટાન્ડર્ડ છે?
ULID એક ઓપન સ્પેસિફિકેશન છે, જે GitHub પર ulid/spec રિપોઝિટરીમાં ઉપલબ્ધ છે. તેનો ઉપયોગ કોઈપણ લાઇબ્રેરી અથવા ભાષામાં કરી શકાય છે. આ પેજ પર જનરેશન ફક્ત JavaScriptમાં crypto.getRandomValues() દ્વારા થાય છે.

૫. શું ULID NanoID કરતાં સારો છે?
તે તમારી જરૂરિયાત પર આધાર રાખે છે. NanoIDની લંબાઈ ચલ છે (ઉદાહરણ તરીકે 21 કેરેક્ટર), પણ તેમાં ટાઇમસ્ટેમ્પ નથી. જો તમારે ટાઇમ-સૉર્ટેબલ IDની જરૂર હોય, તો ULID વધુ યોગ્ય છે. NanoID ફક્ત રેન્ડમ હોય છે, તેથી તેને DBમાં સૉર્ટ કરવું મુશ્કેલ છે.

૬. શું હું ULIDને એકલ ID (single ID) તરીકે પણ કૉપિ કરી શકું?
હા, આ પેજ પર દરેક IDને ક્લિક કરીને અલગથી ક્લિપબોર્ડ પર કૉપિ કરી શકો છો. ઉપરાંત "Copy all!" બટનથી આખી યાદી એક સાથે કૉપિ થઈ જશે.


ઉપયોગના વ્યવહારિક દૃશ્યો

  • વેબ ડેવલપર્સ: API endpoints માટે URL-સેફ, ટૂંકી IDs બનાવવા.
  • ડેટાબેઝ એડમિનિસ્ટ્રેટર્સ: પ્રાથમિક કી તરીકે ULIDનો ઉપયોગ કરવાથી B-tree ઇન્ડેક્સની કાર્યક્ષમતા વધે છે.
  • ડિસ્ટ્રિબ્યુટેડ સિસ્ટમ્સ: બહુવિધ નોડ્સ (nodes) પર અનોખી, સૉર્ટેબલ IDs જનરેટ કરવા.
  • API ડિઝાઇનર્સ: જાહેર IDs માટે કે જે માનવ-વાંચવા યોગ્ય અને અનુમાન લગાવવું મુશ્કેલ હોય.

ULID એ UUIDનો એક વ્યવહારુ, વિચારપૂર્વક ડિઝાઇન કરેલો વિકલ્પ છે. આ પેજ પર તમે તેને સીધા જ બ્રાઉઝરમાં જનરેટ કરી શકો છો – કોઈ સર્વર, કોઈ ઇન્સ્ટોલેશન, કોઈ ગોપનીયતાની ચિંતા નથી.