> ## 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.

# التحقق من CPF البرازيلي ومطابقة الوجه: ID Match

> Didit يقدّم التحقق من قاعدة بيانات برازيلية موثوقة عبر CPF مع مطابقة الوجه. يبدأ السعر من $0.45 لكل استدعاء، بلا عقود ولا حد أدنى.

خدمة SERPRO Datavalid v4 pf-facial تتحقق من رقم CPF (إلزامي) لدى Receita Federal، وتطابق صورة السيلفي الحية (إلزامية) مع صورة الوجه في رخصة القيادة CNH المخزّنة لدى Senatran. ويمكنها اختياريًا فحص الاسم وتاريخ الميلاد. تتيح Didit هذه الخدمة عبر `POST /v3/database-validation/` لتتمكن من التحقق من البيانات المرسلة مقابل المصدر الموثوق، والحصول على نتائج مطابقة موحّدة. صيغة الإدخال: يقبل `tax_number` رقم CPF البرازيلي (11 رقمًا بالضبط).

## التغطية

* **التغطية:** \~50%
* **الدولة:** البرازيل
* **معرّف الخدمة:** `bra_cpf_facial`
* **نطاق البيانات:** البيانات البيومترية
* **الفئة:** NationalIDRegistry

حوالي 50% من البالغين البرازيليين، إذ تعتمد خطوة مطابقة الوجه على صورة CNH المحفوظة لدى Senatran، لذلك لا يمكن مطابقة سوى حاملي رخصة القيادة.

## المدخلات

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

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

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

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

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

مثال: `BRA`

**services** `string` *required* (default: bra\_cpf\_facial)

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

مثال: `bra_cpf_facial`

**consent** `boolean` *required* (default: true)

موافقة المستخدم النهائي الصريحة على هذه الخدمة.

مثال: `true`

**tax\_number** `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`

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

* رقم CPF البرازيلي (11 رقمًا بالضبط)
* يجب أن يحتوي `tax_number` على أرقام فقط؛ أزِل المسافات والشرطات وعلامات الترقيم قبل إرسال الطلب.
* يجب أن يكون طول `tax_number` 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=BRA" \
  -F "services=bra_cpf_facial" \
  -F "vendor_data=user-1234" \
  -F "consent=true" \
  -F "tax_number=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="BRA",
    services=["bra_cpf_facial"],
    consent=True,
    tax_number="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: "BRA",
  services: ["bra_cpf_facial"],
  consent: true,
  tax_number: "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: "BRA",
	Services:     didit.Some([]string{"bra_cpf_facial"}),
	Consent:      didit.Bool(true),
	TaxNumber:    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("BRA")
        .services(List.of("bra_cpf_facial"))
        .consent(true)
        .taxNumber("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' => 'BRA',
    'services' => ['bra_cpf_facial'],
    'consent' => true,
    'tax_number' => '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: "BRA",
  services: ["bra_cpf_facial"],
  consent: true,
  tax_number: "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 = "BRA",
    Services = new string[] { "bra_cpf_facial" },
    Consent = true,
    TaxNumber = "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` المعروضة هي الحالة الافتراضية للميزة، ويمكن لـ[إجراءات المطابقة الجزئية / عدم المطابقة](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": "BRA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "bra_cpf_facial",
      "service_name": "Brazil - CPF + face match (Datavalid)",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "face_match_probability": "Altíssima probabilidade",
        "face_match_score": "0.990",
        "first_name": "John",
        "identification_number": "SAMPLE-ID-12345",
        "last_name": "Doe",
        "name_match_score": "1.000",
        "verifications": {
          "identification_number": true
        }
      },
      "validation": {
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`NO_MATCH`**: لم يُرجع السجل أي تطابق للبيانات المرسلة.

```json 200 OK — NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "BRA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "NO_MATCH",
      "service_id": "bra_cpf_facial",
      "service_name": "Brazil - CPF + face match (Datavalid)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

**`BIOMETRIC_NO_MATCH`**: كانت درجة مطابقة الوجه أقل من حد القبول، أي أن صورة السيلفي لا تعود للشخص نفسه صاحب الصورة في السجل.

```json 200 OK — BIOMETRIC_NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "BRA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "BIOMETRIC_NO_MATCH",
      "service_id": "bra_cpf_facial",
      "service_name": "Brazil - CPF + face match (Datavalid)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

**`BIOMETRIC_IMAGE_UNUSABLE`**: تعذّرت معالجة صورة السيلفي (فارغة، أو لا تحتوي على وجه، أو ذات جودة منخفضة، أو تعذّر على السجل قراءتها). اطلب من المستخدم إعادة التقاط صورة السيلفي.

```json 200 OK — BIOMETRIC_IMAGE_UNUSABLE theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "BRA",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "BIOMETRIC_IMAGE_UNUSABLE",
      "service_id": "bra_cpf_facial",
      "service_name": "Brazil - CPF + face match (Datavalid)",
      "source_data": {
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "identification_number": "no_match"
      }
    }
  ]
}
```

**`INCONCLUSIVE`**: أكّد السجل رقم CPF (وكذلك الاسم وتاريخ الميلاد اللذين أرسلتهما)، لكن تعذّرت مقارنة الوجه: إما لا توجد صورة مرجعية مسجّلة لهذا الرقم، أو تعذّر استخدام صورة السيلفي (لم يُعثر على وجه، أو حجم الصورة غير مناسب، أو جودتها منخفضة، أو وُجد أكثر من وجه). تبقى الحقول المؤكدة في `validation`، لذا يعكس `match_type` نتائجها، لكن فحص الوجه الإلزامي لم يُحسم، فيُرسل الفحص إلى المراجعة. اطلب صورة سيلفي جديدة، أو اعتمد التحقق بالمستند للأشخاص الذين لا توجد لديهم صورة مسجّلة.

```json 200 OK — INCONCLUSIVE theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "BRA",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "INCONCLUSIVE",
      "service_id": "bra_cpf_facial",
      "service_name": "Brazil - CPF + face match (Datavalid)",
      "source_data": {
        "date_of_birth": "1990-01-01",
        "first_name": "John",
        "identification_number": "SAMPLE-ID-12345",
        "last_name": "Doe",
        "name_match_score": "1.000"
      },
      "validation": {
        "identification_number": "full_match"
      }
    }
  ]
}
```

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

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

* `date_of_birth`
* `first_name`
* `identification_number`
* `last_name`
* `name_match_score`

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

تُحتسب رسوم استعلامات البرازيل - CPF + مطابقة الوجه (Datavalid) فقط عندما تتلقى Didit نتيجة حاسمة من مصدر التحقق.

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

## عن هذا المصدر

هذا هو المصدر الحكومي الرسمي: [SERPRO](https://www.serpro.gov.br) Datavalid، ويشغّله جهاز معالجة البيانات الاتحادي البرازيلي. يُتحقق من رقم CPF مقابل Receita Federal، وتُطابَق صورة السيلفي مع الصورة الشخصية المحفوظة لدى Senatran، وهو سجل رخص القيادة الوطني.

لأن الصورة الشخصية مأخوذة من سجل CNH (رخصة القيادة)، لا تُحفظ صورة وجه إلا للأشخاص الذين يحملون رخصة CNH. وهذا ما يحدّ التغطية عند نحو 50% من البالغين: البيانات موثوقة، لكنها غير متوفرة لكل برازيلي لم يحمل رخصة قيادة قط.

**هل تحتاج إلى تغطية أوسع؟** استخدم [BRA - Unico IDCloud (CPF + selfie)](https://docs.didit.me/ar/api-reference/database-validation/brazil/unico-idcloud.md) بدلاً من ذلك. يصل إلى نحو 96% من البالغين البرازيليين عبر سجل Unico البيومتري الخاص، ويكلّف \$0.20 مقابل \$0.45 هنا. اختر Datavalid عندما تحتاج تحديداً إلى السجل الحكومي بوصفه المرجع الموثوق الأساسي، واختر IDCloud عندما تحتاج إلى التحقق من الجميع.

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

* [نظرة عامة على التحقق من قواعد البيانات في البرازيل](https://docs.didit.me/api-reference/database-validation/brazil.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.