AcademicIdentifiers.jl
Structured and validated types for common identifiers used in and around academic work.
Built on FastIdentifiers.jl, each type provides parsing (from shortcodes, prefixed forms, and URLs), canonical string output, persistent URL generation, and round-trip guarantees.
Index
AcademicIdentifiers.AcademicIdentifierAcademicIdentifiers.ArXivAcademicIdentifiers.DOIAcademicIdentifiers.EAN13AcademicIdentifiers.ISBNAcademicIdentifiers.ISNIAcademicIdentifiers.ISSNAcademicIdentifiers.OCNAcademicIdentifiers.ORCIDAcademicIdentifiers.OpenAlexIDAcademicIdentifiers.PMCIDAcademicIdentifiers.PMIDAcademicIdentifiers.RAiDAcademicIdentifiers.RORAcademicIdentifiers.VIAFAcademicIdentifiers.Wikidata
Identifier Types
Bibliographic
AcademicIdentifiers.ArXiv — Type
ArXiv <: AcademicIdentifierAn ArXiv identifier is a unique identifier for preprints in the arXiv repository. It consists of a YYMM.NNNNN format, where YY is the year, MM is the month, and NNNNN is the number of the preprint. Preprints prior to 2015 have a 4-digit number, while those from 2015 onwards have a 5-digit number.
Prior to 2007, ArXiv identifiers were in the form archive.class/YYMMNNN, where archive is the name of the archive (e.g., math, hep-th) and class is a two-letter class code (e.g., CO, EP).
A version number can be appended to the identifier, separated by a 'v'.
As of 2022, all ArXiv identifiers have a corresponding DOI (which has been backdated to include all ArXiv entries).
Examples
julia> parse(ArXiv, "1411.1607v4")
ArXiv:1411.1607v4
julia> parse(ArXiv, "https://arxiv.org/abs/1411.1607")
ArXiv:1411.1607
julia> purl(parse(ArXiv, "arXiv:1411.1607"))
"https://arxiv.org/abs/1411.1607"
julia> parse(ArXiv, "math.GT/0309136") # pre-2007 form
ArXiv:math.GT/0309136
julia> parse(ArXiv, "arxiv:hep-th/9901001v1")
ArXiv:hep-th/9901001v1AcademicIdentifiers.DOI — Type
DOI <: AcademicIdentifierA Digital Object Identifier (DOI) is a persistent identifier for digital objects.
Standardised in ISO 26324 and built on the Handle System, DOIs are managed by the International DOI Foundation and assigned by registration agencies such as Crossref and DataCite. A DOI consists of a registrant prefix (digits and periods, e.g. 10.1038) and an object suffix separated by a slash. The object suffix is unrestricted but treated as ASCII case-insensitive.
Examples
julia> parse(DOI, "10.1145/3276490")
DOI:10.1145/3276490
julia> parse(DOI, "https://doi.org/10.1137/141000671")
DOI:10.1137/141000671
julia> string(parse(DOI, "10.1145/3276490"))
"doi:10.1145/3276490"
julia> purl(parse(DOI, "10.1145/3276490"))
"https://doi.org/10.1145/3276490"
julia> parse(DOI, "10.123/abc") == parse(DOI, "10.123/AbC")
trueAcademicIdentifiers.EAN13 — Type
EAN13 <: AcademicIdentifierA European Article Number (EAN-13) is a 13-digit barcode used globally for product identification.
Defined by GS1 and standardised in ISO/IEC 15420, EAN-13 is a superset of the original 12-digit Universal Product Code (UPC) system. It consists of a 12-digit code followed by a check digit calculated with a weighted mod-10 algorithm. ISBN-13 codes are a subset of EAN-13 (prefixes 978/979). Hyphens in the input are accepted and stripped during parsing.
Examples
julia> parse(EAN13, "9780596520687")
EAN13:9780596520687
julia> parse(EAN13, "978-0-596-52068-7")
EAN13:9780596520687
julia> println(parse(EAN13, "9780596520687"))
9780596520687
julia> parse(EAN13, "9780596520688")
ERROR: ChecksumViolation{EAN13}: expected 7, got 8AcademicIdentifiers.ISBN — Type
ISBN <: AcademicIdentifierAn International Standard Book Number (ISBN) is a unique identifier for books and book-like publications.
Standardised in ISO 2108 and managed by the International ISBN Agency, ISBNs come in two forms: 10-digit (ISBN-10, with a mod-11 check digit that may be X) and 13-digit (ISBN-13, an EAN13 code with prefix 978 or 979). ISBN-10 inputs are automatically converted to ISBN-13 for storage. Output is hyphenated according to the official range data.
Examples
julia> parse(ISBN, "0141439564")
ISBN:0-14-143956-4
julia> parse(ISBN, "978-1-7185-0276-5")
ISBN:978-1-7185-0276-5
julia> string(parse(ISBN, "9781718502765"))
"ISBN 978-1-7185-0276-5"AcademicIdentifiers.ISSN — Type
ISSN <: AcademicIdentifierAn International Standard Serial Number (ISSN) is a unique identifier for serial publications.
Standardised in ISO 3297 and managed by the ISSN International Centre, an ISSN consists of seven digits followed by a check digit (0–9 or X) computed with a weighted mod-11 algorithm. The canonical display form groups the digits as NNNN-NNNC. ISSNs are used to identify journals, newspapers, and other periodicals regardless of medium.
Examples
julia> parse(ISSN, "1095-5054")
ISSN:1095-5054
julia> string(parse(ISSN, "10955054"))
"ISSN 1095-5054"
julia> purl(parse(ISSN, "1095-5054"))
"https://portal.issn.org/resource/ISSN/1095-5054"AcademicIdentifiers.OCN — Type
OCN <: AcademicIdentifierAn OCLC control number (OCN) is the primary key that identifies a bibliographic master record in WorldCat, the global union catalogue maintained by the Online Computer Library Center (OCLC).
Depending on the number of digits, OCNs may be prefixed with ocm, ocn, or on.
Examples
julia> parse(OCN, "ocm00045678")
OCN:45678
julia> parse(OCN, "(OCoLC)ocn148290923")
OCN:148290923
julia> print(parse(OCN, "https://www.worldcat.org/oclc/12345678901"))
on12345678901AcademicIdentifiers.PMCID — Type
PMCID <: AcademicIdentifierA PubMed Central Identifier (PMCID) is a unique identifier for a publication in the PubMed Central database. It consists of an 8-digit integer. Invalid PMCIDs will throw a MalformedIdentifier exception.
PMCID identifiers should not be confused with PubMed identifiers (PMIDs), which are specifically used by PubMed but are distinct from PMCIDs.
Examples
julia> parse(PMCID, "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC12345678")
PMCID:12345678
julia> println(PMCID(12345678))
PMC12345678
julia> PMCID(123456789)
ERROR: ArgumentError: Value 123456789 is above maximum 99999999AcademicIdentifiers.PMID — Type
PMID <: AcademicIdentifierA PubMed Identifier (PMID) is a unique identifier for a publication in the PubMed database. It consists of an 8-digit integer. Invalid PMIDs will throw a MalformedIdentifier exception.
PMID identifiers should not be confused with PubMed Central identifiers (PMCIDs), which are specifically used by PubMed Central but are distinct from PMIDs.
Examples
julia> PMID(28984872)
PMID:28984872
julia> parse(PMID, "https://pubmed.ncbi.nlm.nih.gov/28984872")
PMID:28984872
julia> PMID(123456789)
ERROR: ArgumentError: Value 123456789 is above maximum 99999999People & Organisations
AcademicIdentifiers.ISNI — Type
ISNI <: AcademicIdentifierAn International Standard Name Identifier (ISNI, ISO 27729) uniquely identifies natural persons and organisations engaged in creative activities.
It is a 16-character string formed by a 15-digit base number followed by a single checksum digit calculated with the ISO 7064 MOD 11-2 algorithm. The check digit can be 0–9 or X (representing the value 10).
Standardised in ISO 27729
Examples
julia> parse(ISNI, "0000 0001 2103 2683")
ISNI:0000 0001 2103 2683
julia> parse(ISNI, "https://isni.org/isni/0000000121032683")
ISNI:0000 0001 2103 2683AcademicIdentifiers.OpenAlexID — Type
OpenAlexID{kind} <: AcademicIdentifierAn OpenAlex identifier for entities in the OpenAlex scholarly metadata database.
Operated by OurResearch, OpenAlex provides free and open bibliographic data. Each identifier consists of a single-letter category prefix followed by a positive integer. The seven entity categories are: W (works), A (authors), S (sources), I (institutions), C (concepts), P (publishers), and F (funders).
Examples
julia> parse(OpenAlexID, "W2741809807")
OpenAlexID:W2741809807
julia> parse(OpenAlexID, "A5092938886")
OpenAlexID:A5092938886
julia> purl(parse(OpenAlexID, "W2741809807"))
"https://openalex.org/W2741809807"AcademicIdentifiers.ORCID — Type
ORCID <: AcademicIdentifierAn Open Researcher and Contributor ID (ORCID) is a persistent identifier for researchers and scholarly contributors.
Operated by ORCID, Inc. and conforming to ISO 27729 (ISNI), an ORCID consists of 15 base digits followed by an ISO 7064 MOD 11-2 check character (0–9 or X), displayed in four groups of four separated by hyphens (e.g. 0000-0001-5109-3700). The ORCID consortium specifies the full https://orcid.org/ URL as the canonical representation.
Examples
julia> parse(ORCID, "https://orcid.org/0000-0001-5109-3700")
ORCID:0000-0001-5109-3700
julia> shortcode(parse(ORCID, "0000-0001-5109-3700"))
"0000-0001-5109-3700"
julia> println(parse(ORCID, "0000-0001-5109-3700"))
https://orcid.org/0000-0001-5109-3700AcademicIdentifiers.ROR — Type
ROR <: AcademicIdentifierA Research Organization Registry (ROR) identifier is a persistent identifier for research organisations.
Operated by ROR as an open community-led registry, ROR IDs provide a stable reference for affiliations in scholarly metadata. Each identifier consists of a leading 0, six Crockford base-32 characters, and a two-digit ISO 7064 MOD 97-10 checksum. The full https://ror.org/ URL is the canonical representation.
Examples
julia> parse(ROR, "https://ror.org/05cy4wa09")
ROR:05cy4wa09
julia> print(parse(ROR, "05cy4wa09"))
https://ror.org/05cy4wa09
julia> parse(ROR, "05cy4wa08")
ERROR: ChecksumViolation{ROR}: expected 09, got 08AcademicIdentifiers.VIAF — Type
VIAF <: AcademicIdentifierA Virtual International Authority File (VIAF) identifier is a numeric key for authority records in the library domain.
Hosted by OCLC at viaf.org, VIAF links the national authority files of libraries worldwide into a single virtual authority file. Each VIAF cluster merges records for the same person, corporate body, or work from participating institutions (Library of Congress, BnF, DNB, etc.), providing a shared identifier for bibliographic entities.
Examples
julia> parse(VIAF, "113230702")
VIAF:113230702
julia> parse(VIAF, "https://viaf.org/viaf/113230702/")
VIAF:113230702
julia> purl(parse(VIAF, "113230702"))
"https://viaf.org/viaf/113230702"Research Activities & Entities
AcademicIdentifiers.RAiD — Type
RAiD <: AcademicIdentifierA Research Activity Identifier (RAiD) is a persistent identifier for research projects and activities.
Standardised in ISO 23527 and operated by the Australian Research Data Commons, RAiDs link together the people, organisations, outputs, and funding associated with a research activity. Each RAiD is implemented as a DOI and can be converted to one via convert(DOI, raid).
Examples
julia> parse(RAiD, "10.25.10.1234/a1b2c")
RAiD:10.25.10.1234/a1b2c
julia> parse(RAiD, "https://raid.org/10.25.10.1234/a1b2c")
RAiD:10.25.10.1234/a1b2c
julia> print(parse(RAiD, "10.25.10.1234/a1b2c"))
https://raid.org/10.25.10.1234/a1b2cAcademicIdentifiers.Wikidata — Type
Wikidata <: AcademicIdentifierA Wikidata identifier (QID) is a unique key for entities in the Wikidata knowledge base.
Operated by the Wikimedia Foundation, Wikidata is a free, collaborative, multilingual knowledge graph. Each entity (item, property, or lexeme) receives a stable QID consisting of Q followed by a positive integer. QIDs are widely used for authority control, linked open data, and scholarly knowledge graphs. Common prefixes wd: and wikidata: are accepted during parsing.
Examples
julia> parse(Wikidata, "Q42")
Wikidata:Q42
julia> purl(parse(Wikidata, "Q42"))
"https://www.wikidata.org/wiki/Q42"
julia> parse(Wikidata, "wd:Q42")
Wikidata:Q42Abstract Types
AcademicIdentifiers.AcademicIdentifier — Type
AcademicIdentifier <: AbstractIdentifierAn abstract type representing an academic identifier.
Academic identifiers are unique identifiers referring to resources used in academic and scholarly contexts. They can refer to a wide variety of resources, including publications, researchers, and organisations.
See also: AbstractIdentifier.