GUID and UUID generator

Generate UUID v4 or v7 batches with secure browser randomness. Validate structure, inspect v7 time, and export text, CSV, JSON or SQL values.

How to use

Generate UUID v4 or v7 batches with secure browser randomness. Validate structure, inspect v7 time, and export text, CSV, JSON or SQL values.

Step 1

Choose generation or inspection

Fixed example

12816 × 8

Use 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.

Step 2

Set the batch and output shape

Fixed example

8 - 4 - 4 - 4 - 12550e8400-e29b-41d4-a716-446655440000

For 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.

Step 3

Export only what the result proves

Fixed example

v4: 122v7: 48 + 74

Copy 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.

Practical uses

Database and API fixtures

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.

Log and event investigations

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.

Interchange and encoding checks

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.

Example batch of three UUID v4 identifiers
A demonstration batch of three UUID v4 values, displayed one per line. These are newly generated example identifiers, not existing account credentials or API keys.

Generation, versions and ordering

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-446655440000
Fixed UUID layout: five hexadecimal groups; version 4 and RFC variant a are highlighted in 550e8400-e29b-41d4-a716-446655440000.

Choose v4 or v7 by the downstream job

UUID 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.

Version choice and consequence
ChoiceWhat ClockTools generatesUseful whenImportant limit
UUID v4RFC variant with version 4 and 122 random bitsIndependent random identifiers, fixtures, API resources and database rowsSort order is random and carries no creation time.
UUID v7RFC variant with a 48-bit Unix millisecond timestamp and random remaining bitsApproximate time grouping for logs, events and insert orderNo monotonic counter; device-clock problems affect ordering.
Validate and inspectNo new identifier is generatedChecking canonical form, variant, version, nil/max or v7 UTC timeStructure is not provenance, ownership, uniqueness or secrecy.

What the visible UUID fields mean

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.

Reading the fixed example
PartExampleMeaning
Canonical groups550e8400-e29b-41d4-a716-446655440000Five groups in 8-4-4-4-12 hexadecimal form.
Version nibble41d4 starts with 4Version 4 in this example.
Variant nibblea716 starts with aRFC variant because a is one of 8, 9, a or b.
Nil UUID00000000-0000-0000-0000-000000000000Reserved all-zero sentinel, not random output.
Max UUIDffffffff-ffff-ffff-ffff-ffffffffffffReserved all-one sentinel, not random output.

Clock, uniqueness and batch behavior

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.

What uniqueness statements do and do not cover
StatementCoveredNot covered
Unique in this batchThe visible generated values are distinct from each other.No check against your database or other users.
v4 random bits122 random bits after version and variant placement.No statement that the value is secret or unguessable enough for a token workflow.
v7 timestampA decoded UTC millisecond from the first 48 bits.No proof that the creator's clock was accurate or honest.
No weak fallbackGeneration stops when Web Crypto is unavailable.No guarantee that every browser/device entropy source has identical quality.

Formats, validation and export consequences

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.

Every output control has a destination consequence

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.

Format, encoding and layout choices
ControlChoiceOutput consequence
Text formatLowercaseHyphenated lowercase text such as 550e8400-e29b-41d4-a716-446655440000.
Text formatUppercaseSame identifier with A-F uppercase for systems that require that presentation.
Text formatBracesWraps text as {550e8400-e29b-41d4-a716-446655440000}.
Text formatQuotedWraps each value in double quotes before layout handling.
Text formatNo hyphensProduces 32 hexadecimal digits for compact fields.
Text formatURNAdds urn:uuid: before the canonical UUID text.
EncodingPlain textUses the selected text format exactly.
EncodingBase64Encodes the 16 bytes, for example VQ6EAOKbQdSnFkRmVUQAAA==.
EncodingBase64 URLUses URL-safe Base64 characters and removes padding, for example VQ6EAOKbQdSnFkRmVUQAAA.
EncodingURL encodedPercent-encodes the selected text format for URL/query contexts.
LayoutOne per lineWrites each formatted value on its own line.
LayoutCSVWrites one CSV row; quotes are escaped by the CSV serializer.
LayoutJSON arrayWrites a JSON string array with indentation.
LayoutSQL valuesWrites quoted comma-separated values, not an executable INSERT statement.

Worked byte encodings and quoting pitfalls

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.

Same fixed value, different receiving contracts
ChoiceRepresentationReceiving contract
Lowercase / Plain text550e8400-e29b-41d4-a716-446655440000A printed UUID.
Base64VQ6EAOKbQdSnFkRmVUQAAA==16 network-order bytes encoded with padding.
Base64 URLVQ6EAOKbQdSnFkRmVUQAAAThe same bytes with the URL-safe, unpadded representation.
Braces / URL encoded%7B550e8400-e29b-41d4-a716-446655440000%7DPercent-encoded text, not a binary UUID field.

Inspection is not provenance

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.

What the validator can conclude
ObservationReasonable conclusionDo not conclude
Canonical form shownThe supplied text can be normalized to standard UUID text.The value exists in your database.
Variant is RFC 9562The variant bits match the RFC layout.The value is globally unique in every system.
Version is UUID v7The version field is 7 and a timestamp can be decoded.The timestamp is verified creation time.
Nil or max UUIDThe value is a reserved sentinel pattern.It was generated as an ordinary random ID.
Unsupported variant or versionThe shape is UUID-like but outside this inspector's supported RFC reading.The input is safe to rewrite without checking its source protocol.

Troubleshooting generation and export

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.

Failure state triage
Message or surpriseLikely causeNext check
Count errorQuantity is blank, fractional, negative, zero or above 1,000.Enter a whole number from 1 through 1,000.
Secure randomness unavailableBrowser Web Crypto access failed.Use a modern secure browser context; do not accept weak random output.
Random duplicates errorThe bounded retry window could not fill a unique batch.Generate again and investigate the random source if it repeats.
Clock error for v7The device time cannot fit the v7 timestamp field.Check the system clock before relying on v7 ordering.
Base64 pasted into validator failsThe validator expects UUID text, not encoded bytes.Decode the value first or inspect the original UUID text.

Methodology

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.

Limits

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.

Corrections

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.

Frequently asked questions

Is GUID the same as UUID?
They commonly name the same 128-bit identifier family, but that does not settle its byte representation. A canonical UUID string can be shared across systems while some GUID byte APIs arrange field bytes differently. For ordinary text use the receiver's accepted spelling; for binary or Base64 interchange check byte order as well. The name alone is not an encoding contract.
Should I choose UUID v4 or UUID v7?
Use v4 when you need an independent random identifier without a time prefix. Consider v7 when a timestamp-first identifier fits the receiving system and approximate time grouping is useful. Check that the destination accepts v7; changing versions is a data-contract choice, not just visual styling. This generator does not promise ordered values within one millisecond or verify the clock's accuracy.
Does the page guarantee global uniqueness?
No. The count checks distinct values in this batch only, not earlier batches, another device or your database. Keep a unique constraint and a conflict-handling path where stored keys must be distinct. Passing structural inspection does not add a global uniqueness check: a perfectly formed UUID can be deliberately copied and reused, regardless of how unlikely a random collision would be.
What does the v7 timestamp prove?
It exposes the millisecond value encoded in the fields, shown as UTC. It is not an authenticated creation record. A device clock can be wrong, a timestamp can be deliberately selected, and a published test value can be copied into a later log. Use the decoded time as a clue and compare it with independently recorded event timestamps before drawing a chronology conclusion.
Why does Base64 output not validate when pasted back?
The inspector accepts text UUIDs, not an encoded byte payload. Return to Plain text, use Use generated value, or decode the bytes according to the original byte-order contract before inspection. It also does not automatically percent-decode a URL-encoded UUID. Removing punctuation at random is not decoding and can turn a malformed input into an unintended identifier.
Are braces, quotes, no hyphens and URN different identifiers?
No: those presentations can express the same value. Inspection accepts common wrappers and the URN prefix and returns lowercase hyphenated canonical text. A receiving system may still reject a wrapper even though the identity is unchanged. Choose the representation it expects; do not assume that changing a field's text presentation also changes its database type or makes it a binary UUID.
Can I use a UUID as a password or API token?
Do not assume token suitability from its shape. Many UUIDs are public identifiers; v7 also exposes a time field, and a structurally valid value can have nonrandom contents. A bearer credential needs an appropriate generation and lifecycle design, including authorization, secrecy, expiry and revocation. An unguessable-looking resource ID never substitutes for checking whether a requester is permitted to access that resource.
What happens if secure randomness is unavailable?
Generation fails and clears the batch; it does not switch to a weaker source or retain a partial request. Use a browser with working Web Crypto support. If a duplicate-source error repeats, investigate that environment rather than trusting the retry to certify its randomness. An encoding-only failure is different: switching to Plain text can still display the existing underlying batch.
Why does an old result still say v4 after I select v7?
The selector configures the next generation, while the result describes the batch already created. Press Generate UUIDs to obtain new v7 identities. Format, encoding and layout are different: they change the presentation of the current batch immediately. Quantity also applies only to the next request; lowering it does not trim the existing output to that many entries.
Why do Quoted plus JSON or CSV produce extra escaped quotes?
Quoted text format makes the quotation marks part of each value. JSON or CSV must then escape those marks while serializing its strings. That can be valid output, but it is often not the bare UUID a destination expects. Use Lowercase with Plain text and let the layout perform its own quoting unless the receiver explicitly requires quote characters inside the value.
What do Copy, Download and Share keep?
In generation mode, Copy and Download use the currently formatted output; they do not append the on-screen count or version rows. Inspection copies or downloads the supported canonical UUID, not all inspection details. Share sends only the clean tool URL. There is no saved batch history, so keep needed data before Clear, Reset or a new generation, and check the downloaded file before assuming it was saved.
Why is a nil UUID accepted although its version is zero?
Nil and max are special all-zero and all-one patterns recognized separately from ordinary version/variant inspection. Acceptance here means the sentinel is recognized, not that it is a suitable unique key. The generator offers v4 and v7, not a nil/max generation mode. Your protocol or database rules must decide whether a sentinel is allowed in the field being checked.