Gerege eID — Идентификаторууд (ETSI ID ба регистрийн дугаар)¶
Системд хүн/байгууллагыг таних хоёр гол дугаар: ETSI identifier (сертификатын стандарт түлхүүр) ба регистрийн дугаар (РД) (Монголын иргэний дугаар). Энэ баримт тэдгээрийн бүтэц, утга учрыг тайлбарлана.
1. ETSI identifier — etsi_identifier¶
ETSI = European Telecommunications Standards Institute (Европын стандартын байгууллага).
Манай etsi_identifier нь түүний ETSI EN 319 412-1 стандартын "semantics identifier" —
өөрөөр хэлбэл үндэсний дугаарыг сертификатад бичих олон улсын стандарт формат. eIDAS-д
нийцтэй, Estonia Smart-ID-ийн semanticsIdentifier-тэй wire-compatible (бид түүнийг хувиргасан).
Формат¶
PNOMN-95103015
└┬┘└┬┘ └───┬──┘
│ │ └── жинхэнэ дугаар (хувь хүнд civil_id — зөвхөн цифр, РД биш)
│ └── улс — ISO 3166-1 alpha-2 (MN = Монгол)
└── субьектийн төрөл (3 тэмдэгт)
| Угтвар | Утга | Эзэмшигч | Жишээ |
|---|---|---|---|
| PNO | Person Number (үндэсний хувийн дугаар) | хувь хүн (Natural Person) | PNOMN-95103015 |
| NTR | National Trade Register (улсын бүртгэл) | байгууллага (Legal Person) | NTRMN-1234567 |
Яагаад¶
- Тогтмол түлхүүр: иргэн бүрийн бүх device / certificate / session энэ ID-аар холбогдоно
(
users.etsi_identifierнь primary key). - Стандарт нийцэл: eIDAS qualified cert-д үндэсний ID бичих журам; Европын RP ойлгоно.
- Төрөл угтварт суусан:
PNO↔NTRнь хувь хүн/байгууллагыг ялгана → issuing CA-г автомат сонгоход (domain.SubjectTypeForEtsi, Personal/Organization CA). - Доторх утга =
civil_id(зөвхөн цифр), РД биш: cert-ийнSERIALNUMBERнь X.509 PrintableString тул кирилл РД-г агуулж чадахгүй. Иймд хувь хүндPNOMN-<civil_id>(etsi = "PNOMN-" + civilID); РД ньusers-д тусдаа attribute, cert-д ОРОХГҮЙ.
Кодод:
persistence.UserAccount.EtsiIdentifier,domain.SubjectTypeForEtsi, ETSI бүтээлтcrypto_wired.go("PNOMN-" + civilID).
2. Регистрийн дугаар (РД) — registration_number¶
Монголын иргэний регистрийн дугаар: 2 кирилл үсэг + 8 цифр (ж: УБ95103015).
Бүтэц (нэрлэлийн)¶
У Б 9 5 1 0 3 0 1 5
└┬┘ └──────┬──────┘
│ └── 8 цифр (нэрлэлээр YYMMDD + дараалал)
└── эцэг/нэрийн эхний үсэг (2)
Төрсөн огноо/хүйс — эх сурвалж ба РД-ээс нөхөх¶
date_of_birth ба gender нь эн тэргүүнд KYC баталгаажуулагчаас (DAN/eMongolia) шууд ирнэ
(service.KycResult.DateOfBirth, .Gender; DAN callback-аас NormalizeGender).
Зарим эх сурвалж (G-Sign) эдгээрийг буцаадаггүй — cert subject-аас зөвхөн identity авдаг. Тэр
үед систем РД-ээс нөхөж тооцоолно (util.BirthAndGenderFromRegNo, gsign/kycverifier.go):
- Огноо: эхний 6 цифр = YYMMDD. Сар 21..32 → 2000-аас хойш (он 2000+YY, сар MM-20);
сар 01..12 → 2000-аас өмнө (он 1900+YY). Хүчингүй календарь огноо → nil.
- Хүйс: сүүлээсээ 2 дахь цифр сондгой → "M", тэгш → "F" (огнооноос үл хамаарна).
Цифр дутуу/буруу форматтай бол тус бүрдээ хоосон (nil/"") — буруу таамаглахаас хоосон нь дээр.
3. Холбогдох бусад дугаарууд¶
| Талбар | Тайлбар | Эх сурвалж |
|---|---|---|
civil_id |
Иргэний үнэмлэхний дугаар (РД-тэй ижил байх албагүй) | KYC (KycResult.CivilID) |
| Байгууллагын бүртгэлийн дугаар | Хуулийн этгээдийн улсын бүртгэл → etsi NTRMN-<...>, organizationIdentifier (OID 2.5.4.97) |
KYC (KycResult.OrgRegister) |
document_number |
Төхөөрөмж бүрийн давтагдашгүй UUID (РД агуулахгүй — нууцлал). Smart-ID documentNumber | сервер үүсгэнэ |
certificates.serial_number |
X.509 серийн дугаар (10-тын); OCSP/CRL-д 16-тын (hex) | CA |
Зарчим: иргэний/байгууллагын identity attribute (civil_id, org register, нэр) бүгд KYC баталгаажуулагчаас (DAN/eMongolia) ирнэ — дугаараас тооцоолох/хуурамчлахгүй. Эх сурвалж өгөхгүй бол хоосон. (DOB/хүйс нь ихэвчлэн KYC-аас ирэх ч, эх сурвалж буцаахгүй үед РД-ээс нөхөж тооцоологдоно — §2 үз.)
Хураангуй¶
- ETSI identifier = "үндэсний дугаарыг сертификатад бичих стандарт формат" (
PNOMN-…хувь хүн,NTRMN-…байгууллага). Нэр нь сонин ч утга нь энгийн. - РД = "2 үсэг + 8 цифр" иргэний дугаар. Төрсөн огноо/хүйс нь ихэвчлэн KYC эх сурвалжаас
шууд ирнэ; эс бөгөөс РД-ээс нөхөж тооцоолно (
util.BirthAndGenderFromRegNo).
§Case — Identity текстийн том/жижиг үсгийн ДҮРЭМ¶
Дүрэм: identity текстийн DB канон нь ЖИЖИГ; хайх/шүүх/жиших бүгд жижгээр; харуулахдаа стандарт хэлбэрээр. Хэрэглэгч реестрийн дугаараа том/жижиг ямар ч байдлаар оруулж болно.
Хамрах талбарууд (хүн-оруулах / KYC-аас ирэх identity текст):
users.registration_number (РД), civil_id, given_name, surname, full_name.
| Үйлдэл | Дүрэм | Хэрэгжилт |
|---|---|---|
| Хадгалах | trim + lower (ЖИЖИГ канон) | util.NormalizeIdentity; recordUserAndCert; KYC normalizeRegNo=lower |
| Хайх / lookup / жиших | оролтыг жижгээр нормчлоод харьцуулна (том/жижиг үл хайхран) | pg FindByIdentifier/Search reg_no → lower; inmem аль хэдийн lower; DAN callback matching lower-lower |
| Харуулах | РД → ТОМ (util.DisplayRegNo); кирилл нэр → Title Case (util.TitleCaseName) |
PersonBlock, PersonSummary, admin userView, KYC preview |
ХАМРАХГҮЙ (өөрийн wire/PKI канонтой — хөндөхгүй):
- etsi_identifier — ETSI EN 319 412-1 канон (PNOMN-…/NTRMN-…); lookup/compare ТОМ.
- Cert SERIALNUMBER / subject DN, given_name_latin/surname_latin — ICAO/eIDAS ТОМ.
- document_number (UUID), API key hash, org org_register (цифр), org name (proper noun).
Яагаад: KYC эх сурвалж бүр өөр case буцаадаг (DAN "ЭРДЭНЭБАТ", G-Sign "баярсайхан"), хэрэглэгч РД-гээ "УБ..." эсвэл "уб..." гэж бичдэг. Нэг канон (жижиг) байвал lookup/dedup тууштай; харуулахдаа стандарт хэлбэрт хөрвүүлнэ. Latin/etsi/cert нь тусдаа канонтой тул энэ дүрэмд хамаарахгүй.