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"
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)
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);
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)
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
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());
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
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));
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
🇧🇷 البرازيل
التحقق من CPF البرازيلي ومطابقة الوجه: ID Match
Didit يقدّم التحقق من قاعدة بيانات برازيلية موثوقة عبر CPF مع مطابقة الوجه. يبدأ السعر من $0.45 لكل استدعاء، بلا عقود ولا حد أدنى.
POST
/
v3
/
database-validation
/
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"
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)
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);
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)
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
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());
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
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));
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
{
"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"
}
}
]
}
خدمة SERPRO Datavalid v4 pf-facial تتحقق من رقم CPF (إلزامي) لدى Receita Federal، وتطابق صورة السيلفي الحية (إلزامية) مع صورة الوجه في رخصة القيادة CNH المخزّنة لدى Senatran. ويمكنها اختياريًا فحص الاسم وتاريخ الميلاد. تتيح Didit هذه الخدمة عبر
POST /v3/database-validation/ لتتمكن من التحقق من البيانات المرسلة مقابل المصدر الموثوق، والحصول على نتائج مطابقة موحّدة. صيغة الإدخال: يقبل tax_number رقم CPF البرازيلي (11 رقمًا بالضبط).
التغطية
- التغطية: ~50%
- الدولة: البرازيل
- معرّف الخدمة:
bra_cpf_facial - نطاق البيانات: البيانات البيومترية
- الفئة: NationalIDRegistry
المدخلات
| الحقل | مطلوب | مثال |
|---|---|---|
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 لكل استعلام ناجح
معاملات الجسم
string
افتراضي:"BRA"
مطلوب
رمز الدولة وفق ISO 3166-1 alpha-3 لخدمة قاعدة البيانات هذه.مثال:
BRAstring
افتراضي:"bra_cpf_facial"
مطلوب
مصفوفة تحتوي على معرّف هذه الخدمة. تثبيت الخدمة يُبقي الطلب مقتصرًا على قاعدة البيانات هذه بالذات.مثال:
bra_cpf_facialboolean
افتراضي:"true"
مطلوب
موافقة المستخدم النهائي الصريحة على هذه الخدمة.مثال:
truestring
افتراضي:"11111111111"
مطلوب
رقم التعريف الضريبي أو المالي.مثال:
11111111111file
مطلوب
ملف صورة السيلفي المراد رفعه للتحقق البيومتري من قاعدة البيانات. الصيغ المقبولة: JPEG أو PNG أو WebP.مثال:
@./selfie.jpgstring
الاسم الأول المراد التحقق منه.مثال:
Johnstring
اسم العائلة المراد التحقق منه.مثال:
Doestring
تاريخ الميلاد بصيغة
YYYY-MM-DD.مثال: 1990-01-01string
افتراضي:"user-1234"
معرّف المستخدم الثابت لديك لهذا الشخص، مثل معرّف المستخدم الداخلي. تستخدمه Didit لربط الفحوصات المستقلة بالمستخدم النهائي نفسه، وتقليل الضوضاء الناتجة عن كشف التكرار.مثال:
user-1234قواعد الإدخال وملاحظات التحقق
- رقم CPF البرازيلي (11 رقمًا بالضبط)
- يجب أن يحتوي
tax_numberعلى أرقام فقط؛ أزِل المسافات والشرطات وعلامات الترقيم قبل إرسال الطلب. - يجب أن يكون طول
tax_number11 حرفًا بالضبط.
طريقة الاستدعاء
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"
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)
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);
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)
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
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());
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
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 المعروضة هي الحالة الافتراضية للميزة، ويمكن لـإجراءات المطابقة الجزئية / عدم المطابقة التي هيأتها أن تتجاوزها.MATCH: أكّد السجل الهوية، وتطابقت كل الحقول التي جرى فحصها.{
"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: لم يُرجع السجل أي تطابق للبيانات المرسلة.{
"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: كانت درجة مطابقة الوجه أقل من حد القبول، أي أن صورة السيلفي لا تعود للشخص نفسه صاحب الصورة في السجل.{
"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: تعذّرت معالجة صورة السيلفي (فارغة، أو لا تحتوي على وجه، أو ذات جودة منخفضة، أو تعذّر على السجل قراءتها). اطلب من المستخدم إعادة التقاط صورة السيلفي.{
"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 نتائجها، لكن فحص الوجه الإلزامي لم يُحسم، فيُرسل الفحص إلى المراجعة. اطلب صورة سيلفي جديدة، أو اعتمد التحقق بالمستند للأشخاص الذين لا توجد لديهم صورة مسجّلة.{
"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_birthfirst_nameidentification_numberlast_namename_match_score
الأسعار واتفاقيات مستوى الخدمة
تُحتسب رسوم استعلامات البرازيل - CPF + مطابقة الوجه (Datavalid) فقط عندما تتلقى Didit نتيجة حاسمة من مصدر التحقق.- السعر لكل استدعاء: $0.45 دولار أمريكي.
- الفوترة: لكل استعلام ناجح. لا تُحتسب أي رسوم عند تعذّر الوصول إلى السجل، أو عند غياب الحقول المطلوبة، أو عند رفض الطلب قبل وصوله إلى المصدر.
- زمن الاستجابة: نموذجيًا، p95 أقل من 2 ثانية.
- التوفر: 99.9% لكل ربع سنة من جهة Didit؛ ويختلف توفر المصدر التابع بحسب الدولة ومجموعة البيانات.
عن هذا المصدر
هذا هو المصدر الحكومي الرسمي: SERPRO Datavalid، ويشغّله جهاز معالجة البيانات الاتحادي البرازيلي. يُتحقق من رقم CPF مقابل Receita Federal، وتُطابَق صورة السيلفي مع الصورة الشخصية المحفوظة لدى Senatran، وهو سجل رخص القيادة الوطني. لأن الصورة الشخصية مأخوذة من سجل CNH (رخصة القيادة)، لا تُحفظ صورة وجه إلا للأشخاص الذين يحملون رخصة CNH. وهذا ما يحدّ التغطية عند نحو 50% من البالغين: البيانات موثوقة، لكنها غير متوفرة لكل برازيلي لم يحمل رخصة قيادة قط. هل تحتاج إلى تغطية أوسع؟ استخدم BRA - Unico IDCloud (CPF + selfie) بدلاً من ذلك. يصل إلى نحو 96% من البالغين البرازيليين عبر سجل Unico البيومتري الخاص، ويكلّف $0.20 مقابل $0.45 هنا. اختر Datavalid عندما تحتاج تحديداً إلى السجل الحكومي بوصفه المرجع الموثوق الأساسي، واختر IDCloud عندما تحتاج إلى التحقق من الجميع.متابعة القراءة
آخر تعديل في ٧ نوفمبر ٢٠٢٦