Skip to content

UID utility

Time-ordered unique IDs sized to fit MSH-10 and other ST identifier fields.

Time-ordered, HL7v2-safe unique IDs.

What it does

@glion/util-uid generates short, sortable, HL7v2-safe unique IDs. Use them for MSH-10 message control IDs, order numbers, or any field that needs a unique identifier.

  • Fits MSH-10. IDs are 20 characters — a standard ULID is 26 and does not fit.
  • Sorts by time. IDs start with a timestamp, so sorting IDs sorts by creation time.
  • Safe characters only. Digits and uppercase letters, minus I, L, O, and U: no HL7 delimiters, easy to read aloud, hard to mistype.

Install

npm install @glion/util-uid

Use

import { uid } from "@glion/util-uid";

const controlId = uid(); // e.g. for MSH-10
// "01J9Z6M8QKT5W3XA9C0D" — 20 characters, sorts by generation time

Need a branded ID? Compose it: "MKE" + uid({ size: 17 }).

API

uid(options?)

Generates a time-ordered unique identifier.

ParameterTypeDefaultDescription
options.sizenumber20Total length of the generated ID

The time part needs 10 characters: keep size >= 11, or the ID degrades to a pure-random tail (unique, but not time-ordered). size must be a positive integer (RangeError otherwise). Per-millisecond uniqueness rests entirely on the random tail, so prefer the full default width when volumes are high.