Validates a Corporate Identification Number (CIN): the 21-character code the Registrar of Companies (MCA) allots to every company at incorporation. Each segment carries meaning — listing status, industry, state, year, company type and registration number.
Positions
Meaning
Example
1
Listing status: L listed, U unlisted
U
2–6
Industry code (NIC)
12345
7–8
State code
DL = Delhi
9–12
Year of incorporation
2025
13–15
Company type (PTC, PLC, OPC, NPL…)
PTC
16–21
Registration number
123456
Rule
Detail
Format
^[LU][0-9]{5}[A-Z]{2}[0-9]{4}[A-Z]{3}[0-9]{6}$
Length
Exactly 21 characters
1st character
L or U only
Checksum
None — format only, no public checksum
import { validateCin } from ' indycheck ' ;
validateCin ( ' U12345DL2025PTC123456 ' );
// { ok: true, code: 'VALID',
// parsed: { cin: 'U12345DL2025PTC123456', listing: 'Unlisted',
// industry_code: '12345', state_code: 'DL', year: '2025',
// registration_number: '123456' } }
from indycheck import validate_cin
r = validate_cin ( " U12345DL2025PTC123456 " )
print ( r.parsed [ " company_type " ]) # PTC
use indycheck :: validate_cin;
let r = validate_cin ( " U12345DL2025PTC123456 " );
assert_eq! ( r . parsed . unwrap ()[ " state_code " ], " DL " );
Input
Result
Code
U12345DL2025PTC123456
✅ Valid, unlisted Pvt Ltd, Delhi, 2025
VALID
L12345MH2020PLC123456
✅ Valid, listed public company
VALID
X12345DL2025PTC123456
❌ Invalid — must start with L or U
INVALID_FORMAT
U12345DL2025PTC12345
❌ Invalid — 20 characters
INVALID_LENGTH
U1234ADL2025PTC123456
❌ Invalid — letter inside industry code
INVALID_FORMAT
(empty)
❌ Invalid
EMPTY
Code
Means
EMPTY
Nothing was passed in
INVALID_LENGTH
Not exactly 21 characters
INVALID_FORMAT
Doesn’t match the CIN structure, or 1st character is not L/U
On success, parsed contains:
"cin" : " U12345DL2025PTC123456 " ,
"industry_code" : " 12345 " ,
"registration_number" : " 123456 "
Common company types: PTC private limited, PLC public limited, OPC One Person Company, NPL Section 8 not-for-profit, GPC government company, FTC foreign company.
Honest limits — format only
CIN has no public checksum , so indycheck can only check the shape. It does not confirm the company exists, is active, or is in good standing — for that, search MCA master data on mca.gov.in. LLPs do not get a CIN; they get an LLPIN instead.