This specification describes an experimental vocabulary for expressing a Verifiable Driver's License, which is intended to be fully conformant with the ISO 18013 Mobile Driver's License data model.

This document is experimental.

Introduction

This specification describes an experimental vocabulary for expressing a Verifiable Driver's License, which is intended to be fully conformant with the ISO 18013 Mobile Driver's License data model.

Use Cases and Requirements

The following use cases outline a number of key scenarios that readers might find useful:

Example

The following examples are provided ...

{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/vdl/v2",
    "https://w3id.org/vdl/aamva/v1"
  ],
  "type": [
    "VerifiableCredential",
    "Iso18013DriversLicenseCredential"
  ],
  "issuer": {
    "id": "did:key:z6MkjxvA4FNrQUhr8f7xhdQuP1VPzErkcnfxsRaU5oFgy2E5",
    "name": "Utopia Department of Motor Vehicles",
    "url": "https://dmv.utopia.example/",
    "image": "https://dmv.utopia.example/logo.png"
  },
  "issuanceDate": "2023-11-15T10:00:00-07:00",
  "expirationDate": "2028-11-15T12:00:00-06:00",
  "name": "Utopia Driver's License",
  "image": "data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUg...kSuQmCC",
  "description": "A license granting driving privileges in Utopia.",
  "credentialSubject": {
    "id": "did:example:12347abcd",
    "type": "LicensedDriver",
    "driversLicense": {
      "type": "Iso18013DriversLicense",
      "document_number": "542426814",
      "family_name": "TURNER",
      "given_name": "SUSAN",
      "portrait": "data:image/jpeg;base64,/9j/4AAQSkZJR...RSClooooP/2Q==",
      "birth_date": "1998-08-28",
      "issue_date": "2023-01-15T10:00:00-07:00",
      "expiry_date": "2028-08-27T12:00:00-06:00",
      "issuing_country": "UA",
      "issuing_authority": "UADMV",
      "driving_privileges": [{
        "codes": [{"code": "D"}],
        "vehicle_category_code": "D",
        "issue_date": "2019-01-01",
        "expiry_date": "2027-01-01"
      },
      {
        "codes": [{"code": "C"}],
        "vehicle_category_code": "C",
        "issue_date": "2019-01-01",
        "expiry_date": "2017-01-01"
      }],
      "un_distinguishing_sign": "UTA",
      "aamva_aka_suffix": "1ST",
      "sex": 2,
      "aamva_family_name_truncation": "N",
      "aamva_given_name_truncation": "N"
    }
  }
}
        

Terminology

Concepts

TBD

The Verifiable Driver's License Core Vocabulary

This vocabulary assumes all terms specified in the base Verifiable Credentials [[VC-DATA-MODEL]] context. In addition, the following classes are available for specifying information related to ISO18013 data model compatible Driving Licenses.

Identifier Field Name Field Description Data Type
family_name Family name Last name, surname, or primary identifier, of the licence holder. String
given_name Given names First name(s), other name(s), or secondary identifier, of the licence holder. String
birth_date Date of birth Day, month, year on which the licence holder was born. If unknown, approximate. RFC3339 full-date
issue_date Date of Issue Date licence document was issued. RFC3339 date-time or RFC3339 full-date
expiry_date Date of Expiry Date licence document expires. RFC3339 date-time or RFC3339 full-date
issuing_country Issuing country Country code as alpha 2 code, defined in ISO 3166-1, which issued the mDL or within which the licensing authority is located. String
issuing_authority Issuing authority Name of licensing authority, or issuing country if separate licensing authorities have not been authorized. String
document_number Licence number The number assigned or calculated by the issuing authority. String
administrative_number Administrative number An audit control number assigned by the licensing authority String
driving_privileges Categories of vehicles/restrictions/conditions Driving privileges the licence holder is authorized to drive. It consists of category issue date, expiry date, restriction/condition sign code, restriction/condition sign and restriction/condition value. JSON
un_distinguishing_sign UN distinguishing sign Distinguishing sign of the issuing country according to 18013-1 annex F NOTE this field is added for purposes of the UN conventions on driving licences. String
sex Sex Licence holder’s sex using values as defined in ISO/IEC 5218. 32 bits unsigned integer number
height Height (cm) A Licence holder’s height in centimetres. 32 bits unsigned integer number
weight Weight (kg) A Licence holder’s weight in kilograms O F3N uint. 32 bits unsigned integer number
eye_colour Eye colour Licence holder’s eye colour: black, blue, brown, dichromatic, grey, green, hazel, maroon, pink or unknown. String
hair_colour Hair colour Licence holder’s hair colour: bald, black, blond, brown, grey, red, auburn, sandy, white or unknown. String
birth_place Place of birth Country and municipality or state/province where the licence holder was born. String
resident_address Permanent place of residence The place where the licence holder resides and/or may be contacted (street/house number, municipality etc.) String
portrait Portrait of mDL Holder A reproduction of the licence holder’s portrait. Base 64
portrait_capture_date Portrait image timestamp Date when picture was taken. RFC3339 date-time
age_in_years Age attestation: How old are you (in years)? The age of the mDL Holder. 32 bits unsigned integer number
age_over_18 Age attestation: Nearest “true” attestation above 18. Is the holder over 18. Boolean
age_over_21 Age attestation: Nearest “true” attestation above 21. Is the holder over 21. Boolean
age_over_25 Age attestation: Nearest “true” attestation above 25. Is the holder over 25. Boolean
age_over_62 Age attestation: Nearest “true” attestation above 62. Is the holder over 62. Boolean
age_over_65 Age attestation: Nearest “true” attestation above 65. Is the holder over 65. Boolean
age_birth_year Age attestation: In what year were you born? The year when the mDL Holder was born. 32 bits unsigned integer number
issuing_jurisdiction Issuing jurisdiction Country subdivision code as defined in clause 8, ISO 3166-2. The first part of the code shall be the same as the value for issuing_country. This element is intended to be used in cases where the issuing jurisdiction is different from the issuing authority. String
nationality Nationality Nationality of the mDL Holder as two letter country code (alpha-2 code) defined in ISO 3166-1. String
resident_city Resident city The city where the mDL Holder lives. String
resident_country Resident country The country where the mDL Holder lives. String
resident_state Resident state/province/district The state/province/district where the mDL Holder lives. String
resident_postal_code Resident postal code The postal code of the mDL Holder. String
family_name_national_character Family name of holder in full UTF-8 character set The family name of the mDL Holder in his/her national characters. String
given_name_national_character Given name of holder in full UTF-8 character set The given name of the mDL Holder in his/her national characters. String
signature_usual_mark Signature / usual mark Image of the signature or usual mark of the mDL Holder. Base 64
terseStatusListBaseUrl Terse Status List Base URL The base URL location of a status list. URL
terseStatusListIndex Terse Status List Index An index within a status list. 32 bits unsigned integer number

The Verifiable Driver's License AAMVA Vocabulary

This vocabulary extends the Verifiable Driver's License Core Vocabulary with terms for all data elements defined by the mDL Implementation Guidelines issued by the American Association of Motor Vehicle Administrators (AAMVA). It can be imported as a JSON-LD context behind the URL https://w3id.org/vdl/aamva/v1.

Identifier Field Name Field Description Data Type
aamva_aka_family_name_v2 Alias / AKA family name Other family name by which credential holder is known. String (latin1, 150 characters maximum)
aamva_aka_given_name_v2 Alias / AKA given name Other given name by which credential holder is known. String (latin1, 150 characters maximum)
aamva_aka_suffix Alias / AKA Suffix name Other suffix by which credential holder is known. Allowed values are JR, SR, 1ST, I, 2ND, II, 3RD, III, 4TH, IV, 5TH, V, 6TH, VI, 7TH, VII, 8TH, VIII, 9TH or IX. String
aamva_cdl_indicator CDL indicator FMCSA required field that denotes whether the credential is a Commercial Driver’s License or a Commercial Learner’s Permit. This field is either absent or has value 1 (Commercial Driver’s License). 32bits unsigned integer number
aamva_dhs_compliance Compliance type. Indicates compliance with REAL ID. Allowed values are F (fully compliant) or N (non-compliant). String
aamva_dhs_compliance_text Non-REAL ID credential text Text, agreed on between the Issuing Authority and DHS, appearing on credentials not meeting REAL ID requirements. String
aamva_dhs_temporary_lawful_status Limited duration document indicator Denotes whether the credential holder has temporary lawful status. This field is either absent or has value 1 (temporary lawful status). 32bits unsigned integer number
aamva_domestic_driving_privileges Domestic categories of vehicles / restrictions / conditions. Vehicle types the license holder is authorized to operate. JSON
aamva_edl_credential EDL indicator Either absent or has one of the following values if the credential is an EDLc: 1 (Driver’s license) or 2 (Identification card). 32bits unsigned integer number
aamva_family_name_truncation Family name truncation Code that indicates whether the field has been truncated (T), has not been truncated (N), or unknown whether truncated (U). String
aamva_given_name_truncation Given name truncation Code that indicates whether either the first name or the middle name(s) have been truncated (T), have not been truncated (N), or unknown whether truncated (U). String
aamva_hazmat_endorsement_expiration_date HAZMAT endorsement expiration date Date on which the hazardous material endorsement granted by the document is no longer valid. RFC3339 full-date
aamva_name_suffix Name suffix Name suffix of the individual that has been issued the credential. Allowed values are JR, SR, 1ST, I, 2ND, II, 3RD, III, 4TH, IV, 5TH, V, 6TH, VI, 7TH, VII, 8TH, VIII, 9TH or IX. String
aamva_organ_donor Organ donor. Denotes whether the credential holder is an organ donor. This field is either absent or has value 1 (Donor). 32bits unsigned integer number
aamva_race_ethnicity Race / ethnicity. Codes for race or ethnicity of the credential holder, as defined in AAMVA D20. String
aamva_resident_county Resident county The 3-digit county code of the county where the credential holder lives, as per the 2010 FIPS Codes for Counties and County Equivalent Entities. String
aamva_sex Credential holder’s sex. In line with the AAMVA Card Design Specification, this element can have one of the following values: 1 (Male), 2 (Female) or 9 (Not Specified). 32bits unsigned integer number
aamva_veteran Whether the credential holder is a veteran. This field is either absent or has value 1 (Veteran). 32bits unsigned integer number
aamva_weight_range Weight range Indicates the approximate weight range of the credential holder: 0 (up to 31 kg), 1 (32 – 45 kg), 2 (46 - 59 kg), 3 (60 - 70 kg), 4 (71 - 86 kg), 5 (87 - 100 kg), 6 (101 - 113 kg), 7 (114 - 127 kg), 8 (128 – 145 kg), 9 (146+ kg). 32bits unsigned integer number

Privacy Considerations

This section details the general privacy considerations and specific privacy implications of deploying this specification into production environments.

Security Considerations

There are a number of security considerations that implementers should be aware of when processing data described by this specification. Ignoring or not understanding the implications of this section can result in security vulnerabilities.

While this section attempts to highlight a broad set of security considerations, it is not a complete list. Implementers are urged to seek the advice of security and cryptography professionals when implementing mission critical systems using the technology outlined in this specification.

Accessibility Considerations

There are a number of accessibility considerations implementers should be aware of when processing data described in this specification. As with any web standards or protocols implementation, ignoring accessibility issues makes this information unusable to a large subset of the population. It is important to follow accessibility guidelines and standards, such as [[WCAG21]], to ensure all people, regardless of ability, can make use of this data. This is especially important when establishing systems utilizing cryptography, which have historically created problems for assistive technologies.

This section details the general accessibility considerations to take into account when utilizing this data model.

Internationalization Considerations

There are a number of internationalization considerations implementers should be aware of when publishing data described in this specification. As with any web standards or protocols implementation, ignoring internationalization makes it difficult for data to be produced and consumed across a disparate set of languages and societies, which would limit the applicability of the specification and significantly diminish its value as a standard.

This section outlines general internationalization considerations to take into account when utilizing this data model.