> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# التحقق من الهوية الوطنية النيجيرية وصورة السيلفي (NIMC)

> التحقق من الهوية الوطنية النيجيرية وصورة السيلفي (NIMC) عبر Didit: بحث في قاعدة البيانات الرسمية لنيجيريا. يبدأ السعر من $0.35 لكل عملية، دون عقود أو حد أدنى.

تتحقق هذه الخدمة من رقم الهوية الوطنية النيجيرية (NIN) مقابل سجل لجنة إدارة الهوية الوطنية (NIMC). تتطلب صورة سيلفي: تُطابَق صورة التسجيل المرتبطة برقم NIN مع صورة السيلفي، ولا يُعاد السجل إلا إذا كانت الصورتان لشخص واحد. تتيح لك Didit هذه الخدمة عبر `POST /v3/database-validation/` للتحقق من البيانات المرسلة مقابل المصدر الموثوق، والحصول على نتائج مطابقة موحّدة.

## التغطية

* **التغطية:** \~ 100%
* **الدولة:** نيجيريا
* **معرّف الخدمة:** `nga_national_id_facial`
* **نطاق البيانات:** الهوية
* **الفئة:** NationalIDRegistry

## المدخلات

| الحقل | مطلوب | مثال |
| - | -: | - |
| `national_id` | نعم | `11111111111` |
| `selfie` | نعم | `@./selfie.jpg` |
| `first_name` | لا | `John` |
| `last_name` | لا | `Doe` |
| `date_of_birth` | لا | `1990-01-01` |
| `vendor_data` | لا | `user-1234` |

* **المدخلات المطلوبة:** `national_id`، `selfie`
* **المدخلات الاختيارية:** `first_name`، `last_name`، `date_of_birth`، `vendor_data`
* **الموافقة:** غير مطلوبة
* **توفّر سير العمل:** متاح في سير العمل
* **التغطية:** \~ 100%
* **السعر:** \$0.35 لكل استعلام ناجح

ليست كل وثيقة تقبلها هذه الخدمة تحمل المعرّف الذي يُستخدم لإجراء الاستعلام. عندما لا يُستخرج المعرّف من الوثيقة، يُسجَّل الفحص بوصفه **غير قابل للتطبيق** - لا يُجرى أي استعلام لقاعدة بيانات ولا تُحتسب أي رسوم - وهو ما ينطبق في بعض الدول على نسبة كبيرة من المستخدمين الفعليين. ولتغطيتهم، اجمع المعرّف أيضًا من إجابة في الاستبيانات، أو من حقل مستخرج عبر Document AI، أو من قيمة ترسلها عند إنشاء الجلسة، وقم بربطه في خطوة التحقق من قواعد البيانات.

## معاملات جسم الطلب

**issuing\_state** `string` *required* (default: NGA)

رمز الدولة وفق ISO 3166-1 alpha-3 لخدمة قاعدة البيانات هذه.

مثال: `NGA`

**services** `string` *required* (default: nga\_national\_id\_facial)

مصفوفة تحتوي على معرّف هذه الخدمة. تثبيت الخدمة يُبقي الطلب مقصورًا على قاعدة البيانات المحددة هذه بالذات.

مثال: `nga_national_id_facial`

**national\_id** `string` *required* (default: 11111111111)

رقم الهوية الوطنية لهذه الخدمة.

مثال: `11111111111`

**selfie** `file` *required*

ملف صورة السيلفي المراد رفعه للتحقق البيومتري من قاعدة البيانات. الصيغ المقبولة: JPEG أو PNG أو WebP.

مثال: `@./selfie.jpg`

**first\_name** `string`

الاسم الأول المراد التحقق منه.

مثال: `John`

**last\_name** `string`

اسم العائلة المراد التحقق منه.

مثال: `Doe`

**date\_of\_birth** `string`

تاريخ الميلاد بصيغة `YYYY-MM-DD`.

مثال: `1990-01-01`

**vendor\_data** `string` (default: user-1234)

المرجع الثابت الخاص بك لهذا الشخص، مثل معرّف المستخدم الداخلي لديك. تستخدمه Didit لربط الفحوصات المستقلة بالمستخدم النهائي نفسه، وتقليل ضجيج اكتشاف التكرار.

مثال: `user-1234`

## قواعد الإدخال وملاحظات التحقق

* يجب أن يطابق `first_name` النمط `[A-Za-zÀ-ÖØ-öø-ÿ .'-]+`.
* يجب أن يحتوي `national_id` على أرقام فقط؛ أزل المسافات والشرطات وعلامات الترقيم قبل إرسال الطلب.
* يجب أن يكون طول `national_id` 11 حرفًا بالضبط.

## كيفية الاستدعاء

```bash cURL theme={null}
curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=NGA" \
  -F "services=nga_national_id_facial" \
  -F "vendor_data=user-1234" \
  -F "national_id=11111111111" \
  -F "selfie=@./selfie.jpg"
```

```python Python theme={null}
from didit import Didit

# Reads DIDIT_API_KEY.
client = Didit()

result = client.database_validation.validate(
    issuing_state="NGA",
    services=["nga_national_id_facial"],
    national_id="11111111111",
    vendor_data="user-1234",
    selfie=open("selfie.jpg", "rb"),
)
print(result)
```

```javascript Node.js theme={null}
import Didit, { fileFromPath } from "@didit-protocol/sdk-node";

// Reads DIDIT_API_KEY.
const didit = new Didit();

const result = await didit.databaseValidation.validate({
  issuing_state: "NGA",
  services: ["nga_national_id_facial"],
  national_id: "11111111111",
  vendor_data: "user-1234",
  selfie: await fileFromPath("selfie.jpg"),
});
console.log(result);
```

```go Go theme={null}
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()

result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
	IssuingState: "NGA",
	Services:     didit.Some([]string{"nga_national_id_facial"}),
	NationalID:   didit.String("11111111111"),
	VendorData:   didit.String("user-1234"),
	Selfie:       didit.Some(didit.FileFromPath("selfie.jpg")),
})
if err != nil {
	log.Fatal(err)
}
fmt.Printf("%+v\n", result)
```

```java Java theme={null}
import java.nio.file.Path;
import java.util.List;
import me.didit.Didit;
import me.didit.types.DatabaseValidationValidateParams;

// Reads DIDIT_API_KEY.
Didit client = new Didit();

var result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
        .issuingState("NGA")
        .services(List.of("nga_national_id_facial"))
        .nationalId("11111111111")
        .vendorData("user-1234")
        .selfie(Path.of("selfie.jpg"))
        .build());
System.out.println(result);
```

```php PHP theme={null}
<?php

require 'vendor/autoload.php';

use Didit\DiditClient;
use Didit\File;

// Reads DIDIT_API_KEY.
$didit = new DiditClient();

$result = $didit->databaseValidation->validate([
    'issuing_state' => 'NGA',
    'services' => ['nga_national_id_facial'],
    'national_id' => '11111111111',
    'vendor_data' => 'user-1234',
    'selfie' => File::fromPath('selfie.jpg'),
]);
print_r($result->toArray());
```

```ruby Ruby theme={null}
require "didit"

# Reads DIDIT_API_KEY.
didit = Didit::Client.new

result = didit.database_validation.validate(
  issuing_state: "NGA",
  services: ["nga_national_id_facial"],
  national_id: "11111111111",
  vendor_data: "user-1234",
  selfie: Pathname("selfie.jpg")
)
puts result.to_h
```

```csharp .NET theme={null}
using System;
using System.Text.Json;
using Didit;

// Reads DIDIT_API_KEY.
using var client = new DiditClient();

var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
    IssuingState = "NGA",
    Services = new string[] { "nga_national_id_facial" },
    NationalId = "11111111111",
    VendorData = "user-1234",
    Selfie = FileUpload.FromPath("selfie.jpg"),
});
Console.WriteLine(JsonSerializer.Serialize(result));
```

كل استدعاء ناجح يعيد HTTP `200`. يوضح حقل **`outcome_code`** ما الذي حدث فعلاً، فيميّز مثلاً بين عدم تطابق بيومتري حقيقي (`BIOMETRIC_NO_MATCH`) وصورة سيلفي تعذّرت قراءتها (`BIOMETRIC_IMAGE_UNUSABLE`). الحالة `status` الموضحة هي الحالة الافتراضية للميزة، ويمكن لـ[إجراءات Partial Match / No Match](https://docs.didit.me/ar/core-technology/database-validation/database-validation-warnings.md) التي تضبطها أن تتجاوزها.

**`MATCH`** - أكّد السجل الهوية، وتطابق كل حقل جرى فحصه.

```json 200 OK — MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "NGA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "address": "1 SAMPLE STREET",
        "birth_country": "nigeria",
        "birth_lga": "Ikeja",
        "birth_state": "Lagos",
        "date_of_birth": "1990-01-01",
        "face_match_score": 92.4,
        "first_name": "JOHN",
        "gender": "Male",
        "identification_number": "11111111111",
        "last_name": "DOE",
        "marital_status": "single",
        "middle_name": "SAMUEL",
        "phone_number": "08000000000",
        "photo_available": true,
        "residence_lga": "Ikeja",
        "residence_state": "Lagos",
        "residence_town": "IKEJA"
      },
      "validation": {
        "date_of_birth": "full_match",
        "full_name": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`PARTIAL_MATCH`** - تطابقت صورة السيلفي مع الصورة المسجلة، ورقم NIN موجود في السجل، لكن اسمًا أو تاريخ ميلاد أرسلته يختلف عن سجل NIMC. يُعاد السجل حتى تتمكن من رؤية الحقل المختلف.

```json 200 OK — PARTIAL_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "NGA",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "address": "1 SAMPLE STREET",
        "birth_country": "nigeria",
        "birth_lga": "Ikeja",
        "birth_state": "Lagos",
        "date_of_birth": "1990-02-01",
        "face_match_score": 92.4,
        "first_name": "JOHN",
        "gender": "Male",
        "identification_number": "11111111111",
        "last_name": "DOE",
        "marital_status": "single",
        "middle_name": "SAMUEL",
        "phone_number": "08000000000",
        "photo_available": true,
        "residence_lga": "Ikeja",
        "residence_state": "Lagos",
        "residence_town": "IKEJA"
      },
      "validation": {
        "date_of_birth": "no_match",
        "full_name": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`BIOMETRIC_NO_MATCH`** - رقم NIN موجود في السجل، لكن صورة السيلفي ليست للشخص نفسه الظاهر في صورة التسجيل لدى NIMC (درجة مطابقة الوجه أدنى من عتبة القبول). لا يُعاد أي شيء من السجل، بل الدرجة فقط.

```json 200 OK — BIOMETRIC_NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "NGA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "BIOMETRIC_NO_MATCH",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "face_match_score": 12.5,
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

**`INCONCLUSIVE`** - رقم NIN موجود في السجل، لكن تعذّرت مطابقة الوجه، إما لعدم وجود صورة تسجيل محفوظة أو لعدم اكتشاف وجه. لا يُعاد أي شيء من السجل، و`match_type` قيمته null، ويُحال الفحص إلى المراجعة.

```json 200 OK — INCONCLUSIVE theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "NGA",
  "match_type": null,
  "validations": [
    {
      "outcome_code": "INCONCLUSIVE",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {},
      "validation": {}
    }
  ]
}
```

**`DOCUMENT_NOT_FOUND`** - رقم NIN صحيح الصياغة، لكن سجل NIMC لا يتضمن أي بيانات عنه. تُفرض رسوم على الاستعلام.

```json 200 OK — DOCUMENT_NOT_FOUND theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "NGA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "DOCUMENT_NOT_FOUND",
      "service_id": "nga_national_id_facial",
      "service_name": "Nigeria National ID + Selfie (NIMC)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

## البيانات المُرجعة

تعتمد الحقول الدقيقة التي تظهر في `source_data` على ما يعيده السجل. يوثّق المثال المُولَّد لـ `nga_national_id_facial` حاليًا هذا الشكل الموحّد:

* `address`
* `birth_country`
* `birth_lga`
* `birth_state`
* `date_of_birth`
* `face_match_score`
* `first_name`
* `gender`
* `identification_number`
* `last_name`
* `marital_status`
* `middle_name`
* `phone_number`
* `photo_available`
* `residence_lga`
* `residence_state`
* `residence_town`

## الأسعار واتفاقيات مستوى الخدمة

يتم احتساب رسوم استعلامات Nigeria National ID + Selfie (NIMC) فقط عندما يتلقى Didit نتيجة حاسمة من مصدر التحقق.

* **السعر لكل استدعاء:** \$0.35 USD.
* **الفوترة:** لكل استعلام ناجح. لا يتم احتساب أي رسوم عندما يكون السجل غير متاح، أو عندما تكون الحقول المطلوبة مفقودة، أو عندما يتم رفض الطلب قبل وصوله إلى المصدر.
* **زمن الاستجابة:** زمن p95 المعتاد أقل من 2 s.
* **التوفر:** 99.9% لكل ربع سنة من جهة Didit؛ ويختلف توفر المصدر الخارجي حسب الدولة ومجموعة البيانات.

## صورة سيلفي ومطابقة الوجه

يُعيد سجل NIMC الكامل لصاحب الرقم الوطني الصالح، لذا فإن معرفة الرقم ليست دليلاً على ملكيته. لذلك يرتبط كل استعلام بصورة سيلفي: تتم مطابقة الوجه مع صورة التسجيل التي يحتفظ بها NIMC لهذا الرقم، ولا يُعاد السجل إلا عندما يعود كلاهما إلى الشخص نفسه.

* **تطابق:** يتضمن `source_data` سجل NIMC و`face_match_score`. تتم مقارنة الأسماء وتاريخ الميلاد اللذين ترسلهما بالسجل، وتُعرض النتيجة في `validation`. أرسلها للحصول على حكم بشأن الاسم وتاريخ الميلاد، أو لا ترسلها واقرأ قيم السجل من `source_data`.
* **شخص مختلف:** `BIOMETRIC_NO_MATCH`. يُعاد `face_match_score` فقط، ولا تُعاد أي بيانات شخصية.
* **تعذر المطابقة:** `INCONCLUSIVE` عندما لا يحتفظ NIMC بصورة لهذا الرقم، أو عندما لا يمكن العثور على وجه. لا يُعاد أي شيء، ويُرسل الفحص إلى المراجعة.
* **رقم وطني غير معروف:** `DOCUMENT_NOT_FOUND`. يتم احتساب الاستعلام.

في سير العمل تُؤخذ صورة سيلفي من خطوة كشف الحيوية أو مطابقة الوجه، أو من الصورة الموجودة على المستند المرفوع عندما لا يحتوي سير العمل على خطوة للوجه. يُرفض أي طلب بدون صورة سيلفي، أو برقم وطني ليس مكوّناً من 11 رقماً، قبل احتساب أي رسوم.

## متابعة القراءة

* [نظرة عامة على التحقق من قواعد البيانات في نيجيريا](https://docs.didit.me/api-reference/database-validation/nigeria.md)
* [نظرة عامة على التحقق من قواعد البيانات](https://docs.didit.me/ar/core-technology/database-validation/overview.md)
* [رموز النتائج](https://docs.didit.me/ar/core-technology/database-validation/database-validation-outcome-codes.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.