UETR Validator
Check whether a Unique End-to-end Transaction Reference will be accepted by a SWIFT gpi or ISO 20022 endpoint. Every rule is checked separately, so when something fails you find out exactly which rule and why: not just that it was rejected.
Checked entirely in your browser. Nothing is transmitted or logged: safe to paste a production reference.
Result
Paste a reference above and press Validate.
How to use this tool
- Paste the reference exactly as it appears in the message. Do not strip hyphens or change case first: those are two of the things being checked.
- For a batch, put one reference per line. You get a pass count plus a list of only the failures and which rule each one broke.
- Read the failing row rather than the verdict. “Not valid” is rarely useful on its own; “Version nibble is 4 – FAIL – found 7” tells you someone generated a UUIDv7.
- Fix at the source. A reference that fails here will be rejected downstream, and a rejection at the endpoint gives you far less detail than this does.
- Need a fresh one instead? Use the UETR Generator.
A UETR either conforms or it does not, and the rules are short enough to state completely. It must be 36 characters. It must split on hyphens into five groups of 8, 4, 4, 4 and 12. Every remaining character must be a hexadecimal digit. It should be lowercase. The first character of the third group must be 4. The first character of the fourth group must be 8, 9, a or b. That is the entire specification, and this tool checks each clause independently.
Checking them separately matters because the failures cluster into a few recognisable causes. A version nibble of 7 means someone used a UUIDv7 generator: increasingly common now that v7 is the fashionable default for database keys, and wrong here. A version nibble of 1 means a v1 UUID, which additionally leaks a MAC address. A length of 32 with correct hex means the hyphens were stripped somewhere in transit, often by a spreadsheet or an over-eager sanitiser. A length of 38 usually means braces survived from a Windows or COM-style generator.
Uppercase is the most frequent complaint and the most contested. The value is the same hexadecimal number regardless of case, and some endpoints accept either form. But SWIFT’s canonical representation is lowercase, some implementations enforce it at the schema level, and there is no circumstance in which sending uppercase is an advantage. This tool flags it as a failure for that reason: lowercase always works, uppercase sometimes does not.
One thing no format validator can tell you is whether the reference is the right one. A perfectly-formed UETR that was reused from another payment, or regenerated by an intermediary that should have passed the original through, will pass every check here and still break traceability. Format validity and correct usage are different problems. This tool solves the first; only your own records solve the second.
Frequently asked questions
My UETR was rejected but this tool says it is valid. Why?
Format validity is only one reason a message gets rejected. The reference may be correctly formed but reused from another payment, or the rejection may concern a different field entirely. It is also possible the receiving system enforces something beyond the published format. Start by checking whether the same UETR appears on another instruction.
Why does uppercase count as a failure here?
Because lowercase is SWIFT’s canonical form and is universally accepted, while uppercase is accepted only sometimes. Treating it as a failure is the conservative reading: if you correct it you lose nothing, and if you leave it you are relying on the receiving implementation being lenient. The result panel names case separately so you can judge for yourself.
What does the variant nibble actually mean?
It marks which UUID specification the value follows. RFC 4122 reserves the top bits of the fourth group, which makes the first character of that group 8, 9, a or b. Any other character means the value was not produced by a compliant generator: commonly a hand-typed test value or a truncated hash.
Can I check a whole file of references?
Yes. Paste one per line. You will get a pass count and a list of failures with the specific rule each one broke. The first 20 failures are listed individually. Everything runs locally, so the size of the batch is limited only by your browser.
Is it safe to paste a production UETR?
Yes. Validation happens entirely in your browser: no network request is made, nothing is logged, and nothing leaves the page. You can confirm this by opening your browser’s network tab while you validate, or by disconnecting from the network first.
Related tools
- UETR Generator: produce a compliant reference, with MT103 and pacs.008 output forms.
- UUID Generator: general-purpose v4 and v7 UUIDs outside a payments context.
- All developer and IT tools: the full set, everything running in your browser.