Aadhaar

What is Aadhaar?

Aadhaar is India’s national digital identity system maintained by UIDAI (Unique Identification Authority of India).

  • It is a 12-digit unique identity number issued to residents of India, based on their biometric and demographic data.

  • Aadhaar serves as a foundational ID that can be used to verify identity across financial, telecom, and government services.

  • Verification is done via UIDAI APIs or Aadhaar-linked services, such as QR codes.

Registering with Aadhaar on Self

Self allows users to prove identity using Aadhaar in a privacy-preserving way. There are two common methods:

  1. Using the mAadhaar app

    1. Download the official mAadhaar app from UIDAI (Android/IOS).

    2. Inside the app, generate a QR code that contains Aadhaar demographic details.

      mAadhaar
    3. Upload this QR code in the Self app to register.

      1. Self processes this QR to derive a unique nullifier (an identifier) that allows users to prove uniqueness without sharing their Aadhaar number directly.

  2. By using the UIDAI website

    1. Go to the UIDAI website

    2. Enter your Aadhaar number, and verify yourself with an OTP to get a PDF.

    3. Take a screenshot of the QR code in the pdf and upload in the Self app.

The password to the PDF in both cases is the first four letters of your name in caps following by your birth year.

Working with attributes in Aadhaar

Since Aadhaar uses a different format than passports, keep in mind that some of the disclosed attribute formats can be different.

GenericDiscloseOutputV2

Field
Type
Formatting / Value
forbiddenCountriesListPacked

uint256[4]

Packed bytes of all countries into an array 4 uint256 numbers.

issuingState

string

Varies**

name

string[]

First value contains the entire name (and it may vary)

idNumber

string

Last 4 letters of the aadhaar number.

nationality

string

'IND'

dateOfBirth

string

DD-MM-YYYY

gender

string

'M' | 'T' | 'F'

expiryDate

string

'UNAVAILBLE'

olderThan

uint256

0 - 99

ofac

bool[3]

Each value is true if ofac check is enabled.

GenericDiscloseOutput

Field
Type
Formatting / Value
forbiddenCountriesListPacked

string[]

Packed bytes list of forbidden countries

issuingState

string

Varies

name

string

Full name. Can vary as well

idNumber

string

Last 4 digits of aadhaar

nationality

string

'IND'

dateOfBirth

string

YYYYMMDD

gender

string

'M' | 'T' | 'F'

expiryDate

string

'UNAVAILABLE'

minimumAge

string

'00'-'99'

ofac

bool[]

True if in ofac

**Varies refers to a string being all caps / lowercase / first letter in caps and the rest in lowercase.

Last updated