Saltar a contenido

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 ойлгоно.
  • Төрөл угтварт суусан: PNONTR нь хувь хүн/байгууллагыг ялгана → 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 нь тусдаа канонтой тул энэ дүрэмд хамаарахгүй.