Choose generation or inspection
Fixed example
12816 × 8Use Generate UUIDs when you need new v4 or v7 values. Use Validate and inspect when you have one existing identifier and need its canonical form, variant, version or v7 UTC timestamp.
Generate UUID v4 or v7 batches with secure browser randomness. Validate structure, inspect v7 time, and export text, CSV, JSON or SQL values.
Generate UUID v4 or v7 batches with secure browser randomness. Validate structure, inspect v7 time, and export text, CSV, JSON or SQL values.
Fixed example
12816 × 8Use Generate UUIDs when you need new v4 or v7 values. Use Validate and inspect when you have one existing identifier and need its canonical form, variant, version or v7 UTC timestamp.
Fixed example
8 - 4 - 4 - 4 - 12550e8400-e29b-41d4-a716-446655440000For generation, choose v4 or v7, enter a whole quantity from 1 through 1,000, then select the text format, encoding and layout that the destination expects.
Fixed example
v4: 122v7: 48 + 74Copy or download the visible output after generation. Treat validation as structural inspection: it does not prove where an identifier came from, whether it is secret or whether a database record exists.
To prepare three fictional API resources, choose UUID v4, quantity 3, Lowercase, Plain text and JSON array, then Generate UUIDs. The result is an array of three strings, not three objects with an id property. Add the surrounding fixture fields in your test code. Switching the layout to One per line lets you review the same values without generating replacements; Download then uses the selected layout's extension. Record the generated version separately if the fixture needs provenance. A uniqueness count of three checks only this batch, not existing keys in a database.
For a log investigation, select Validate and inspect and paste the fixed v7 example 017f22e2-79b0-7cc3-98c4-dc0c0c07398f. Its time field reads 2022-02-22T19:22:22.000Z, in UTC, regardless of your local display zone. Compare that clue with an independently recorded event time; the identifier could have been copied or generated using a wrong clock. Copy in inspection mode returns the canonical UUID itself, not an investigation report with the decoded timestamp. Record the time and its uncertainty in your own notes if they matter to the comparison.
Start with one test value and the receiving system's documented contract. A UUID text field may expect Lowercase and Plain text; a binary interchange field may expect Base64 of 16 bytes. Changing those options reformats the same batch, so you can compare representations without changing identities. Confirm that decoding reproduces the original UUID before importing a larger set. In CSV, this tool places values across one row, not down a one-column file. For SQL, it gives a list of quoted strings, not a runnable INSERT or a database-specific binary conversion.

GUID and UUID are used here as practical names for the same 128-bit identifier family. RFC 9562 defines the 16-octet layout, the version field, the variant field and the standard 8-4-4-4-12 text shape. ClockTools generates only UUID v4 and UUID v7, while the inspector can identify supported RFC-variant versions 1 through 8 plus the nil and max sentinel values.
Generation is deliberate. Nothing is generated on opening the page. Changing Version or Quantity prepares the next batch; it does not change the identities already shown. Text format, encoding and layout immediately reformat the existing values without generating replacements. The result panel keeps the count and version of the batch that actually produced those values, so selecting v7 after generating v4 does not relabel the old batch as v7.
This tool uses browser cryptographic randomness for every generated UUID and has no weak-random fallback. If Web Crypto is unavailable or repeatedly returns duplicates in the bounded retry window, no partial batch is kept. That failure is useful because a quiet fallback would make the result look stronger than it is.
8 - 4 - 4 - 4 - 12550e8400-e29b-41d4-a716-446655440000UUID v4 is the general-purpose random choice. After the required version and variant bits are set, 122 bits remain random. It is a good default for independent clients, test data, public resource identifiers and systems that do not need the identifier itself to reveal a time.
UUID v7 puts a Unix millisecond timestamp in the most significant 48 bits, then uses random bits for the remaining variable space in this implementation. That makes values from different milliseconds sort broadly by creation time when clocks move forward, which can help log review and some index patterns.
Version 7 is not a promise of strict generation order. This generator does not add a monotonic counter or sub-millisecond sequence. Values created in the same millisecond contain random trailing bits, and a device clock that moves backward can disrupt the visible ordering.
| Choice | What ClockTools generates | Useful when | Important limit |
|---|---|---|---|
| UUID v4 | RFC variant with version 4 and 122 random bits | Independent random identifiers, fixtures, API resources and database rows | Sort order is random and carries no creation time. |
| UUID v7 | RFC variant with a 48-bit Unix millisecond timestamp and random remaining bits | Approximate time grouping for logs, events and insert order | No monotonic counter; device-clock problems affect ordering. |
| Validate and inspect | No new identifier is generated | Checking canonical form, variant, version, nil/max or v7 UTC time | Structure is not provenance, ownership, uniqueness or secrecy. |
The familiar hyphenated form is a text presentation of 16 bytes. The five groups have 8, 4, 4, 4 and 12 hexadecimal digits, but the groups are not separate random strings. The version nibble appears at the start of the third group, and the RFC variant appears in the first hex digit of the fourth group.
The fixed public v4 example 550e8400-e29b-41d4-a716-446655440000 has 4 in the version position and a in the RFC variant position. The variant digit can be 8, 9, a or b for the RFC variant because the leading bits are 10. These positions explain how inspection recognizes fields; they do not reveal whether the other bits were generated randomly. A hand-written value can imitate the same pattern.
The inspector also recognizes nil and max values as special sentinels. Nil is all zero bits; max is all one bits. They can be structurally meaningful in a protocol, but they are not random generated identifiers and should not be mistaken for ordinary unique values.
| Part | Example | Meaning |
|---|---|---|
| Canonical groups | 550e8400-e29b-41d4-a716-446655440000 | Five groups in 8-4-4-4-12 hexadecimal form. |
| Version nibble | 41d4 starts with 4 | Version 4 in this example. |
| Variant nibble | a716 starts with a | RFC variant because a is one of 8, 9, a or b. |
| Nil UUID | 00000000-0000-0000-0000-000000000000 | Reserved all-zero sentinel, not random output. |
| Max UUID | ffffffff-ffff-ffff-ffff-ffffffffffff | Reserved all-one sentinel, not random output. |
For UUID v7, ClockTools takes one device-clock millisecond timestamp for the batch and writes it into the first six bytes of each value. Each value still receives fresh random bytes before the version and variant bits are fixed. If the clock value cannot fit in the 48-bit v7 timestamp field, generation fails instead of wrapping.
The unique count is local to the current generated batch. The generator uses a Set and bounded retries so duplicate random outputs inside the requested batch are not returned. It does not consult a global registry, a database, another tab or values produced yesterday.
Probability is still not the same as a business rule. If duplicate keys would be consequential, enforce uniqueness where the identifiers are stored and handle conflict errors there. Generation cannot know the state of your application. A failed new generation clears the previous batch rather than leaving an old result looking like a successful new request, so copy needed fixtures before experimenting with the next batch.
| Statement | Covered | Not covered |
|---|---|---|
| Unique in this batch | The visible generated values are distinct from each other. | No check against your database or other users. |
| v4 random bits | 122 random bits after version and variant placement. | No statement that the value is secret or unguessable enough for a token workflow. |
| v7 timestamp | A decoded UTC millisecond from the first 48 bits. | No proof that the creator's clock was accurate or honest. |
| No weak fallback | Generation stops when Web Crypto is unavailable. | No guarantee that every browser/device entropy source has identical quality. |
The output controls change presentation, not the underlying identifier. Lowercase, uppercase, braces, quotes, no hyphens and URN are text formats for the same UUID value. Encoding and layout are separate choices, so choose them according to the receiving system instead of treating the longest or most compact output as automatically better.
The Web Crypto specification describes getRandomValues as a source of cryptographically strong random values, and this page depends on that browser API for generation. Formatting then happens in the page: Base64 encodes the 16 UUID bytes, Base64 URL uses the URL-safe alphabet, and URL encoded output percent-encodes the chosen text representation.
Validation is structural inspection. It accepts 32 hexadecimal digits or the exact hyphenated 8-4-4-4-12 form, optionally wrapped or prefixed as a URN. It reports canonical form, variant, version and v7 time when the fields support that reading. It does not prove randomness, origin, authorization, database existence or safe use as a credential.
Text format is useful when the receiver expects a printed UUID. Lowercase is the canonical browser output used by the generator, uppercase is for systems with that convention, braces and quotes are wrappers, no hyphens is the 32-hex compact form, and URN adds the urn:uuid: prefix.
Encoding is a different layer. Plain text preserves the selected text format. URL encoded output percent-encodes that text. Base64 and Base64 URL ignore the text-format wrapper and encode the 16 raw bytes in network order; the format selector is disabled for those encodings because braces or uppercase letters are not part of the byte value.
Layout decides how several values are arranged. One per line is easiest to scan. CSV creates one row of comma-separated fields. JSON array is useful for fixtures and code. SQL values creates quoted values separated by commas; it is a values list, not a complete SQL statement.
| Control | Choice | Output consequence |
|---|---|---|
| Text format | Lowercase | Hyphenated lowercase text such as 550e8400-e29b-41d4-a716-446655440000. |
| Text format | Uppercase | Same identifier with A-F uppercase for systems that require that presentation. |
| Text format | Braces | Wraps text as {550e8400-e29b-41d4-a716-446655440000}. |
| Text format | Quoted | Wraps each value in double quotes before layout handling. |
| Text format | No hyphens | Produces 32 hexadecimal digits for compact fields. |
| Text format | URN | Adds urn:uuid: before the canonical UUID text. |
| Encoding | Plain text | Uses the selected text format exactly. |
| Encoding | Base64 | Encodes the 16 bytes, for example VQ6EAOKbQdSnFkRmVUQAAA==. |
| Encoding | Base64 URL | Uses URL-safe Base64 characters and removes padding, for example VQ6EAOKbQdSnFkRmVUQAAA. |
| Encoding | URL encoded | Percent-encodes the selected text format for URL/query contexts. |
| Layout | One per line | Writes each formatted value on its own line. |
| Layout | CSV | Writes one CSV row; quotes are escaped by the CSV serializer. |
| Layout | JSON array | Writes a JSON string array with indentation. |
| Layout | SQL values | Writes quoted comma-separated values, not an executable INSERT statement. |
For the fixed UUID 550e8400-e29b-41d4-a716-446655440000, the byte encodings are VQ6EAOKbQdSnFkRmVUQAAA== in Base64 and VQ6EAOKbQdSnFkRmVUQAAA in Base64 URL. The ordinary text has 36 characters, compact hex has 32, padded Base64 has 24, and this unpadded Base64 URL form has 22. They represent the same 16 bytes. Encoding the 36 printed ASCII characters instead would encode a different input and would not give those byte results.
RFC 4648 describes the Base64 and URL-safe alphabets. The URL-safe form replaces the plus and slash characters used by ordinary Base64 and, in this tool, omits trailing padding. Case still matters in either Base64 alphabet; do not lowercase a Base64 value as if it were hexadecimal UUID text. URL encoded is a third choice: braces become %7B and %7D, while canonical UUID letters, digits and hyphens need no percent substitution.
Byte order is part of an interchange contract. This page encodes bytes in the same network order as the canonical hexadecimal text. Microsoft's Guid.ToByteArray documentation shows that its parameterless byte output reverses the first three field groups relative to text. If the receiver uses that representation, compare documented byte order explicitly; agreeing that both fields contain a GUID does not establish that their Base64 strings will match.
Quoting is also layered. Quoted text format adds quote characters to each value; a JSON layout then escapes those characters inside its string, and CSV escapes them inside a field. Extra escaped quotes can therefore be correct serialization but still be wrong for a receiver that wanted a bare UUID. Lowercase plus Plain text is a straightforward starting point for JSON and CSV imports. SQL values uses single-quoted strings; supply the surrounding query structure separately and prefer parameterized application queries rather than pasting generated strings into a live query.
| Choice | Representation | Receiving contract |
|---|---|---|
| Lowercase / Plain text | 550e8400-e29b-41d4-a716-446655440000 | A printed UUID. |
| Base64 | VQ6EAOKbQdSnFkRmVUQAAA== | 16 network-order bytes encoded with padding. |
| Base64 URL | VQ6EAOKbQdSnFkRmVUQAAA | The same bytes with the URL-safe, unpadded representation. |
| Braces / URL encoded | %7B550e8400-e29b-41d4-a716-446655440000%7D | Percent-encoded text, not a binary UUID field. |
A valid structure means the text fits a supported UUID shape and its version and variant fields can be read. It does not prove the identifier was generated by ClockTools, by Web Crypto, by a particular service or at the decoded v7 time.
For UUID v7, the timestamp is useful evidence only inside a larger investigation. It may reflect the device clock used by a generator, a deliberately altered timestamp or a copied test value. Treat it as a sorting clue, then compare server logs, database timestamps and trusted audit records.
The inspector accepts compact hex or hyphenated text, and it can remove common wrappers such as braces, parentheses, quotes or a urn:uuid: prefix before checking. It does not decode Base64, Base64 URL or URL-encoded input for validation; decode those representations in the receiving system before structural inspection.
Inspection accepts one identifier at a time, not an exported CSV row or JSON array. Use generated value pastes the first original UUID from the current batch, not its encoded display, so you can inspect a batch even while Base64 is selected. The inspector recognizes supported RFC versions 1 through 8, but generation offers only v4 and v7. An unsupported-variant warning can still display a normalized shape; it is not a successful RFC validation or permission to rewrite the source protocol's fields.
| Observation | Reasonable conclusion | Do not conclude |
|---|---|---|
| Canonical form shown | The supplied text can be normalized to standard UUID text. | The value exists in your database. |
| Variant is RFC 9562 | The variant bits match the RFC layout. | The value is globally unique in every system. |
| Version is UUID v7 | The version field is 7 and a timestamp can be decoded. | The timestamp is verified creation time. |
| Nil or max UUID | The value is a reserved sentinel pattern. | It was generated as an ordinary random ID. |
| Unsupported variant or version | The shape is UUID-like but outside this inspector's supported RFC reading. | The input is safe to rewrite without checking its source protocol. |
A quantity error means the count is not a whole number from 1 through 1,000. The tool does not round, clamp or silently reduce the request. A random-source error means Web Crypto did not provide usable random bytes, so no identifiers were generated.
An encoding error can occur when a browser lacks the API needed for the chosen output encoding. Switch to Plain text to recover the underlying batch or try another browser. A generation failure is different: it discards the batch rather than retaining partial values. Clipboard, share and download failures do not regenerate identifiers. When export access fails, select the visible output manually if it is available; check downloads before assuming a started file was saved.
Do not paste production secrets into a UUID report. A UUID can be public, private or security-sensitive depending on how your system uses it, but the shape alone does not make it a password. For bearer tokens, password resets or API credentials, use a purpose-built secret generator and lifecycle controls.
| Message or surprise | Likely cause | Next check |
|---|---|---|
| Count error | Quantity is blank, fractional, negative, zero or above 1,000. | Enter a whole number from 1 through 1,000. |
| Secure randomness unavailable | Browser Web Crypto access failed. | Use a modern secure browser context; do not accept weak random output. |
| Random duplicates error | The bounded retry window could not fill a unique batch. | Generate again and investigate the random source if it repeats. |
| Clock error for v7 | The device time cannot fit the v7 timestamp field. | Check the system clock before relying on v7 ordering. |
Base64 pasted into validator fails | The validator expects UUID text, not encoded bytes. | Decode the value first or inspect the original UUID text. |
Generation fills 16 bytes with browser Web Crypto randomness, then sets RFC version and variant bits. UUID v4 leaves 122 bits random after those fixed fields. UUID v7 writes one device-clock Unix millisecond timestamp into the first 48 bits for the batch, fills the remaining variable bits randomly, and sets version 7 plus the RFC variant. The tool checks uniqueness only inside the generated batch and formats the resulting 16 bytes according to the selected controls.
Generation supports only UUID v4 and v7, with whole quantities from 1 through 1,000. No weak-random fallback, global uniqueness registry, database lookup, monotonic v7 counter or clock-accuracy verification is provided. Base64 and Base64 URL outputs are encodings of the 16 bytes, not accepted validator input. A valid UUID shape is not proof of origin, ownership, secrecy, authorization or record existence.
For a reproducible report, include the mode, version, quantity, text format, encoding, layout, browser, exact visible error and a safe example value. For validation issues, provide the exact pasted string and expected variant or version. Do not include production credentials, bearer tokens, private customer identifiers or database rows when a public test UUID demonstrates the issue.