Tagabuo ng ULID

Bumuo ng mga ULID online: 26-character na Crockford Base32 ID na may 48-bit na oras at 80 random bits.

Format
Mga Na-generate na ID
Handa na po. Bumuo ng mga ULID sa inyong browser.

Paano binuo ang ID na ito

Layout
26 na Crockford Base32 character: 10 character para sa oras na sinusundan ng 16 na random na character.
Entropy
80 random bits pagkatapos ng 48-bit millisecond timestamp.
Oras
Opo. Ang unang 10 character ay nag-e-encode ng oras sa millisecond, at ang lexical order ay sumusunod sa oras.
Panganib ng collision
Ang random na dulo ay may 80 bits; ang panganib ay nakadepende sa kung gaano karaming ID ang inyong lilikhain sa loob ng parehong millisecond.
Halimbawa
01M12BRPCRGKWJ5VE19P3WF1VE

Ang inyong mga ID ay ginagawa nang lokal gamit ang matibay na browser randomness. Walang ipinapadala sa BroBroGo.

Mga Madalas Itanong (FAQ)

Saan po magandang gamitin ang ULID?

Ang ULID ay compact, URL-friendly, at maaaring i-sort ayon sa oras bilang plain text, na kapaki-pakinabang para sa mga log, object key, at mga record na dapat i-sort ayon sa oras ng paglikha.

Pareho po ba ang ULID at UUID v7?

Hindi po. Bagama't parehong may kasamang oras sa millisecond, gumagamit ang ULID ng Crockford Base32 at may 26 na character, habang ang UUID v7 ay pinapanatili ang karaniwang hexadecimal na anyo ng UUID.

Ang Natatanging Pahinang Ito

Ano ang pinagkaiba ng pahinang ito? Hindi lang ito basta isang identifier generator. Ang format na ULID ay gumagawa ng mga identifier na mas maikli kaysa sa UUID (26 character laban sa 36), at gumagamit lamang ng Crockford's base32 alphabet. Ibig sabihin, ang mga ULID ay case‑insensitive at walang gitling. Higit sa lahat, ang mga ito ay lexicographically sortable ayon sa oras ng pagkakagawa dahil ang unang 10 character ay nag-encode ng isang timestamp sa millisecond precision. Ang mga ULID ay URL‑safe din nang hindi na kailangan ng anumang pagtakas. Hindi nag-aalok ang pahinang ito ng toggle para sa uppercase o hyphen dahil ang ULID ay inherently case‑insensitive at walang gitling. Ang random component ay sumasakop sa natitirang 16 na character (80 bits), at ang kabuuang underlying value ay 128 bits.

Ano ang ginagawa ng pahinang ito? Pumili ka ng ULID bilang format ng identifier, pumili kung ilang ID ang kailangan mo (sa pagitan ng 1 at 100), at agad na bumubuo ang tool ng isang listahan ng natatangi, time‑sortable na ULID. Ang bawat ID ay lumalabas bilang isang 26‑character case‑insensitive string na handa nang kopyahin nang isa-isa o lahat nang sabay-sabay.

Paano Gumagana ang ULID sa Ilalim ng Hood

Ang ULID ay hindi basta random na mga titik at numero. Mayroon itong panloob na istraktura na pinagsasama ang oras at randomness. Ang 128 bits ng isang ULID ay nahahati sa dalawang bahagi: isang 48‑bit na timestamp at isang 80‑bit na random component. Ang timestamp na ito ay nagtatala ng oras sa millisecond precision simula noong Unix epoch (January 1, 1970). Sa pamamagitan ng Crockford's base32 encoding, ang 48‑bit timestamp ay nagiging unang 10 character ng ULID. Ang natitirang 80 bits ng randomness ay nagiging huling 16 na character.

Dahil ang unang 10 character ay direktang nagrerepresenta ng oras, ang mga ULID ay natural na nag-uuri ayon sa pagkakasunod-sunod ng pagkakagawa. Ito ang dahilan kung bakit mas mahusay ang ULID kaysa sa random UUIDs para sa mga database index. Kapag nag-insert ka ng bagong tala sa isang B‑tree index, ang mga bagong ULID ay karaniwang mas malaki kaysa sa huling naidagdag na ID, kaya ang pag-insert ay nangyayari sa dulo ng index. Sa mga random na UUID, ang pag-insert ay maaaring mangailangan ng madalas na pag-rebalance ng puno, na nagpapabagal sa performance.

Gayunpaman, may isang mahalagang babala: ang mga ULID ay hindi garantiya ng mahigpit na pagkakasunud-sunod para sa mga ID na nalikha sa loob ng parehong millisecond. Kung dalawang ULID ay nabuo sa loob ng parehong millisecond, ang random component ang magpapasiya kung alin ang mas nauna sa lexicographic order. Hindi ito isang depekto; ito ay isang trade‑off upang mapanatili ang mataas na bilis ng pagbuo nang walang lock o kontrahan.

Crockford Base32: Bakit Ito Mahalaga

Ang Crockford's base32 alphabet ay isang carefully designed character set. Ito ay binubuo ng mga digit 0‑9 at mga titik A‑Z, maliban sa I, L, O, at U. Bakit inalis ang mga titik na ito? Upang maiwasan ang visual na kalituhan. Ang "I" at "L" ay maaaring magmukhang magkapareho sa ilang typefaces. Ang "O" ay madaling malito sa numerong "0". Ang "U" ay inalis upang ang uppercase at lowercase na "u" ay hindi magdulot ng kalituhan sa "v" o "w". Kaya ang Crockford base32 ay may 32 character: 0‑9 at 22 titik (A‑H, J‑N, P‑T, V‑Z).

Ang kahalagahan nito sa konteksto ng ULID ay malinaw: ang mga ULID ay case‑insensitive. Ibig sabihin, ang "01ARZ3NDEKTSV4RRFFQ69G5FAV" at "01arz3ndektsv4rrffq69g5fav" ay parehong valid na representasyon ng parehong identifier. Walang posibilidad ng pagkalito kung ang isang tao ay gumamit ng lowercase sa halip na uppercase, o vice versa. Ito ay isang malaking bentahe kumpara sa UUIDs, kung saan ang paghahalo ng case ay nagdudulot ng ibang value.

Dahil walang gitling ang ULID, ang mga ito ay mas compact at walang posibilidad ng typographical error na may kaugnayan sa mga gitling. Ang 26 na character ay direktang nagrerepresenta ng 128 bits nang walang anumang overhead para sa mga separator. Sa madaling salita, ang bawat character ay may kahulugan.

Paghahambing: ULID vs. UUID v4 at UUID v7

Ang UUID v4 ay ang pinakakilalang format. Ito ay gumagamit ng 122 bits ng randomness at 6 bits ng fixed version/variant data, na ginagawang 128 bits ang kabuuan. Ngunit ang representasyon nito ay 36 character na may apat na gitling. Ang mga character ay kasama ang mga digit 0‑9 at ang mga titik A‑F (hexadecimal). Ang UUID v4 ay case‑insensitive? Hindi, dahil opisyal itong nakasulat sa lowercase, ngunit madalas itong ginagamit sa uppercase sa mga system. Ang mga gitling ay pormal na bahagi ng format ngunit maaaring tanggalin sa ilang konteksto. Ang UUID v4 ay hindi nagdadala ng anumang impormasyon tungkol sa oras ng pagkakagawa, kaya hindi ito maaaring pag-uri-uriin ayon sa oras.

Ang UUID v7 ay isang mas bagong format na nagtatangkang tugunan ang isyung ito. Ito ay may 48‑bit na timestamp (tulad ng ULID) na sinusundan ng 74 bits ng randomness at 6 bits ng fixed bits. Ang representasyon nito ay pareho pa rin sa UUID v4 — 36 character na may mga gitling — ngunit ang panloob na istraktura ay mas maganda para sa database indexing. Gayunpaman, ang ULID ay nananatiling mas maikli (26 vs. 36 character) at walang gitling. Bukod dito, ang ULID ay gumagamit ng Crockford base32, na may mas malawak na character set kaysa sa hexadecimal (32 vs. 16 character). Kaya ang ULID ay mas compact at mas madaling basahin.

Ang bentahe ng ULID sa URL safety ay malinaw: ang lahat ng character ng Crockford base32 ay unreserved sa RFC 3986. Walang pangangailangan para sa percent‑encoding. Sa UUID, ang mga gitling ay hindi kailangan ng encoding, ngunit kung tatanggalin mo ang mga gitling, mawawala ang formal validity.

Posibilidad ng Collision at Bilis ng Pagbuo

Ang ULID ay may 80‑bit random component. Upang maunawaan ang posibilidad ng collision, kailangan nating isaalang-alang ang birthday paradox. Sa 80 bits ng randomness, ang inaasahang bilang ng mga item na maaaring mabuo bago magkaroon ng 50% na posibilidad ng isang collision ay humigit-kumulang 2^(80/2) o mga 2^40, na halos 1 trilyon. Ito ay lubhang mataas at sapat para sa karamihan ng mga application.

Gayunpaman, ang aktwal na posibilidad ay depende sa rate ng pagbuo. Kung bumubuo ka ng 1,000 ULID bawat millisecond, ang 48‑bit timestamp ay natatangi sa bawat millisecond, kaya ang bawat grupo ng 1,000 ULID ay may natatanging timestamp prefix. Ang collision ay posible lamang sa loob ng parehong millisecond at sa pagitan ng mga ULID na may parehong timestamp at parehong random component. Dahil ang random component ay 80 bits, ang posibilidad ng dalawang ULID na magkapareho sa loob ng parehong millisecond ay 1 sa 2^80, na lubhang maliit.

Ang tool na ito ay bumubuo ng mga ULID nang lokal sa browser gamit ang crypto.getRandomValues(). Ito ay isang secure at strong random number generator na ibinibigay ng operating system. Walang anumang data ang ipinapadala sa server. Ito ay mahalaga para sa privacy at seguridad, lalo na kung gumagamit ka ng tool na ito upang bumuo ng mga identifier para sa mga sensitibong sistema.

Kailan at Sino ang Nangangailangan ng Pahinang Ito

Ang pahinang ito ay hindi para sa lahat. Ito ay partikular na idinisenyo para sa mga web at mobile developers na nangangailangan ng mas maikli, URL‑safe na mga identifier na maaaring pag-uri-uriin ayon sa oras nang hindi nangangailangan ng hiwalay na timestamp column. Isa rin itong kapaki-pakinabang na tool para sa mga database administrators na nagdidisenyo ng primary keys na nagpapabuti sa performance ng B‑tree insertion dahil ang mga bagong ID ay humigit-kumulang monotonically increasing.

Ang mga system architects na nagtatayo ng distributed systems ay makikinabang din. Sa isang distributed environment, ang bawat node ay maaaring bumuo ng mga ULID nang lokal nang walang pangangailangan ng sentralisadong coordinator. Ang timestamp component ay nagbibigay ng global ordering, kahit na ang mga node ay may bahagyang magkakaibang mga orasan. Ang randomness ay nagsisiguro ng uniqueness kahit na ang dalawang node ay bumubuo ng ULID sa parehong millisecond.

Ang mga API designers na gustong mag-expose ng public‑facing IDs ay pahalagahan ang human‑friendliness ng ULID. Walang mixed‑case confusion, walang hyphen ambiguity, at ang 26 character ay mas madaling i-transcribe kaysa sa 36 character na may mga gitling. Ang paghahambing sa NanoID ay nagpapakita ng trade‑off: ang NanoID ay may variable na haba at maaaring gawing mas maikli, ngunit walang built‑in na timestamp at hindi gaanong deterministic ang ordering.

FAQ

1. Paano ko makokopya ang isang ULID mula sa listahan? I-click lamang ang indibidwal na ULID na gusto mong kopyahin. Awtomatiko itong makokopya sa iyong clipboard. Maaari mo ring kopyahin ang lahat ng ULID sa pamamagitan ng "Copy all" button, at lalabas ang status na "Copied all!".

2. Paano kung kailangan ko ng higit sa 100 ULID? Ang tool ay tumatanggap lamang ng count sa pagitan ng 1 at 100. Kung kailangan mo ng higit pa, maaari kang bumuo ng maraming set at pagsamahin ang mga ito. Siguraduhin lamang na ang bawat set ay natatangi dahil ang random component ay sapat na malaki upang maiwasan ang collision kahit na sa maraming set.

3. Bakit hindi ako makapag-pili ng uppercase/hyphen toggle para sa ULID? Ang ULID ay inherently case‑insensitive. Hindi mahalaga kung gumamit ka ng uppercase o lowercase — pareho silang wasto at kumakatawan sa parehong identifier. Walang gitling ang ULID, kaya walang toggle para rito. Ito ay isang pinag-isipang disenyo upang mabawasan ang pagkalito at mapanatili ang compactness.

4. Gaano katagal ang isang ULID? Ang isang ULID ay may 26 na character. Ito ay 10 character na mas maikli kaysa sa isang UUID na may mga gitling (36 character) at 6 na character na mas maikli kaysa sa isang UUID na walang gitling (32 character).

5. Ano ang mangyayari kung dalawang ULID ay nabuo sa loob ng parehong millisecond? Hindi sila magkakaroon ng parehong timestamp prefix, ngunit ang random component ay magkakaiba. Ang dalawang ULID ay magkakaiba pa rin. Ang lexicographic order ng mga ito ay hindi garantisadong sumunod sa pagkakasunod-sunod ng generation sa loob ng parehong millisecond, dahil ang random component ang magpapasiya kung alin ang mas nauna. Ito ay isang trade‑off upang mapanatili ang mataas na bilis ng pagbuo nang walang synchronization.

6. Ligtas bang gamitin ang tool na ito para sa mga sensitibong identifier? Oo. Ang lahat ng pagbuo ng ID ay nangyayari nang lokal sa iyong browser gamit ang crypto.getRandomValues(), na isang secure at strong random number generator. Walang anumang data ang ipinapadala sa server. Wala ring cookies o tracking na nauugnay sa paggamit ng tool na ito.