AZ Tools

ULID 디코더 (타임스탬프 & 랜덤성)

개발

ULID는 26자의 사전순 정렬 가능한 식별자입니다: 앞 10자는 48비트 밀리초 타임스탬프, 뒤 16자는 80비트 랜덤성이며 모두 Crockford Base32입니다. 시간이 상위 비트에 있어 ULID는 생성 순서대로 정렬됩니다 — 사람들이 무작위 UUID 대신 ULID를 쓰는 이유가 바로 이것입니다. 이 디코더는 ULID를 다시 분리합니다: 타임스탬프를 읽어 ISO UTC, 상대 표시 "x 전", 원시 에폭 밀리초로 보여 주고, 랜덤 부분을 Crockford Base32와 hex 두 가지로 표시합니다. 디코딩은 대소문자를 가리지 않고 고전적인 Crockford 혼동 문자를 관대하게 처리합니다 — I와 L은 1로, O는 0으로 읽습니다 — 또한 길이·알파벳·타임스탬프가 48비트를 넘지 않는지(첫 글자는 0–7) 검증합니다. 모든 처리는 로컬에서 실행되며 업로드되지 않습니다.

표준형01ARZ3NDEKTSV4RRFFQ69G5FAV
타임스탬프 (UTC)2016-07-30T23:54:10.259Z
상대9y 11mo 전
에폭 ms1469922850259
랜덤성 (Base32)TSV4RRFFQ69G5FAV
랜덤성 (hex)0xd6764c61efb99302bd5b

앞 10자 = 48비트 ms 타임스탬프, 뒤 16자 = 80비트 랜덤성. Crockford Base32: I/L→1, O→0, 대소문자 무관.

사용법

  1. ULID 붙여넣기(26자, 예: 01ARZ3NDEKTSV4RRFFQ69G5FAV).
  2. 생성 타임스탬프(UTC·상대·에폭 ms)를 읽으세요.
  3. 타임스탬프나 랜덤성을 Crockford 또는 hex로 필요에 따라 복사하세요.

자주 묻는 질문

ULID는 시간을 어떻게 인코딩하나요?
앞 10자의 Crockford Base32가 Unix 에폭(1970-01-01) 이후 밀리초의 48비트 카운트를 담습니다. 48비트는 서기 10889년까지 커버하므로 첫 글자는 0–7만 가능하며, 그보다 크면 오버플로로 무효 처리됩니다. 나머지 16자는 80비트 랜덤성입니다.
왜 디코딩이 대소문자를 가리지 않나요?
ULID는 사람 친화적으로 설계된 Crockford Base32를 씁니다: 대소문자를 구분하지 않고 시각적으로 헷갈리는 I·L을 1로, O를 0으로 취급합니다. 이 도구는 디코딩 전에 이를 정규화하므로, 소문자로 입력하거나 0 대신 O를 써도 올바르게 디코딩됩니다.
ULID는 UUID와 어떻게 다른가요?
둘 다 128비트 ID지만, ULID는 타임스탬프가 상위 비트에 있는 26자의 정렬 가능한 Base32로 인코딩되어 ULID 목록은 이미 생성 순서입니다. 무작위 UUID(v4)는 시간을 담지 않아 의미 있게 정렬되지 않습니다. UUID v7이 같은 요구에 대한 표준 답이며, 그건 UUID 인스펙터를 쓰세요.
타임스탬프는 정확한가요?
네 — 밀리초 타임스탬프가 ULID에 직접 저장되므로 생성기의 시계가 정확했다면 생성 시각은 밀리초 단위로 정확합니다. 상대 시간은 사용자 기기의 현재 시계를 기준으로 계산됩니다.

관련 도구