How to Validate DOIs and Clean a DOI List Before You Cite It
Validate DOIs against the 10.registrant/suffix syntax, flag entries missing the 10. prefix or slash, and clean a bibliography locally in your browser.
How to Validate DOIs and Clean a DOI List Before You Cite It
A reference list is only as trustworthy as its weakest identifier. You export 200 citations from a reference manager, paste them into a grant report, and three of them point nowhere because a DOI lost its slash during a copy-paste, or someone typed doi:10.1000 and dropped the suffix. Nobody notices until a reviewer clicks the link.
The DOI List Validator exists for exactly that moment: you paste a messy batch, and it tells you which rows pass DOI syntax and which do not, with a plain reason printed next to every failing line. Everything runs inside your browser tab. No upload, no API call, no source text leaving the page.
What a DOI actually looks like
A DOI (Digital Object Identifier) has a fixed shape, and that shape is what a syntactic validator can check. A syntactically valid DOI starts with 10., followed by a registrant code, then a slash, then a suffix. So 10.1000/xyz123 is well formed: 10. is the mandatory directory indicator, 1000 is the registrant code assigned to a publisher, the / separates the prefix from the suffix, and xyz123 is the item-specific suffix.
That structure is rigid enough to catch a whole class of common mistakes:
- An entry with no
10.prefix (just1000/xyz123or a bare URL fragment) is flagged. - An entry with no slash (
10.1000xyz123) is flagged, because there is no way to tell where the registrant ends and the suffix begins. - An entry that breaks off mid-suffix or carries leftover punctuation from a copy job is flagged with the reason on its row.
This is the part worth saying out loud, because it trips up a lot of people: passing syntax does not mean the DOI resolves to a real paper. The validator confirms that a string matches the 10.NNNN/suffix pattern and its registry format. It does not contact doi.org, it does not fetch the article, and it cannot tell you whether 10.1000/xyz123 is a live record or a number someone invented that happens to look correct. Syntax checking and resolvability are two different jobs, and this tool does the first one. Treat a green row as "this is shaped like a DOI," not as "this paper exists."
A worked example
Say you paste this list, copied from a half-cleaned spreadsheet:
10.1038/s41586-020-2649-2
10.1000/xyz123
doi:10.1145/3292500.3330701
10.1093nar/gkv007
1234/not-a-doi
https://doi.org/10.1109/TPAMI.2016.2577031
10.1038/s41586-020-2649-2
The validator walks each row and produces a pass/fail report. A CSV view comes back along these lines:
value,normalized,line,valid,reason
10.1038/s41586-020-2649-2,10.1038/s41586-020-2649-2,1,true,OK
10.1000/xyz123,10.1000/xyz123,2,true,OK
doi:10.1145/3292500.3330701,10.1145/3292500.3330701,3,true,OK
10.1093nar/gkv007,10.1093nar/gkv007,4,false,missing slash after registrant
1234/not-a-doi,1234/not-a-doi,5,false,missing 10. prefix
https://doi.org/10.1109/TPAMI.2016.2577031,10.1109/TPAMI.2016.2577031,6,true,OK
10.1038/s41586-020-2649-2,10.1038/s41586-020-2649-2,7,true,OK
Read the report from the reason column. Line 4 fails because 10.1093nar has no slash separating registrant from suffix. Line 5 fails because 1234/... never starts with 10.. The doi: prefix on line 3 and the https://doi.org/ wrapper on line 6 are stripped during normalization, so the underlying identifier still passes. And line 7 is an exact duplicate of line 1, which you can collapse with the dedupe option so the survivor stays unique.
Notice the report keeps the original value and the source line number next to every row. When a reviewer asks which reference to fix, you point at line 4, not at "one of the DOIs somewhere."
Cleaning a real bibliography
I keep a citation file for a long-running survey, and every few months I merge in new exports from two reference managers plus a couple of pages I copied straight from journal sites. Last time I ran the merged batch through the validator, two rows came back invalid: one had picked up a trailing . from a sentence it was copied out of, and another was missing its slash because a line wrap had glued the registrant to the suffix. Both took ten seconds to fix once the tool told me which lines they were on. Before I started doing this, I would find those breaks the slow way, by clicking a dead link in the published PDF.
The cleanup flow that works for me:
- Paste the merged list, or load a local
.txtexport with the file picker. The File API reads it in the tab; nothing is sent to a server. - Let the parser normalize each entry, stripping
doi:prefixes andhttps://doi.org/wrappers so equivalent forms line up. - Turn on dedupe to drop exact repeats, and sort if you want a stable order for diffing against last quarter's list.
- Keep invalid rows visible (not hidden) so you have a punch list of references to repair rather than a silently shorter file.
- Export the artifact you need. CSV and Markdown carry the line numbers, which is what you want for an audit trail.
One caution from the tool's own guidance: copied web text often hides whitespace and zero-width characters, so normalize before you dedupe or import. Two rows that look identical can carry different invisible padding and survive a naive dedupe.
Choosing an output format
Once the list is clean, you rarely want the same shape every time. The validator can emit CSV, JSON, Markdown, a SQL IN clause, a TypeScript union, or plain lines. That covers the usual handoffs: a CSV for a spreadsheet or a CRM import, JSON for a script, a SQL IN (...) list for a one-off query against a holdings table, and plain lines when you just want to paste the survivors back into a manuscript. You pick the format, download the exact file, and skip the hand-editing where commas and quotes go missing.
If your job is narrower than full validation, the related single-purpose tools are sometimes a better fit. The DOI Extractor pulls DOIs out of arbitrary prose and HTML when you only want to harvest them, and the DOI Normalizer standardizes prefix and case without running the full pass/fail report. The validator is the one to reach for when you specifically need a row-by-row verdict with reasons.
What this tool will and won't do for you
To be precise about the boundaries:
- It checks DOI syntax: the
10.prefix, the registrant code, the required slash, and the suffix, against the registry pattern. - It explains failures per row, with the original value and source line number preserved.
- It normalizes, dedupes, sorts, and converts the list across CSV, JSON, Markdown, SQL
IN, TypeScript union, and plain lines. - It runs 100% in your browser: parsing, validation, copy, and download all happen locally.
It will not confirm that a syntactically valid DOI resolves to an existing paper, and it will not verify that an account, domain, or resource behind any identifier is real. Use it to make your list well-formed and clean. Use a resolver, or a click, to confirm a specific DOI is alive. Treated that way, it turns a vague "some of these links are broken" into a short, exact list of lines to repair before you hand the bibliography off.
Made by Toolora · Updated 2026-06-13