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

# Kambodscha Nationalausweis-Prüfung API: Datenabgleich

> Didit validiert kambodschanische Nationalausweise gegen maßgebliche Datenbanken. Ab $0.59 pro Aufruf, keine Verträge, keine Mindestabnahme.

Prüft Eingabedaten gegen eine Datenbank einer staatlichen Behörde mit den Identitätsdaten von Staatsbürgern. Didit stellt diesen Dienst über `POST /v3/database-validation/` bereit, damit Sie die übermittelten Daten mit der maßgeblichen Quelle abgleichen und normalisierte Übereinstimmungsergebnisse erhalten.

## Abdeckung

* **Abdeckung:** \~ 80%
* **Land:** Kambodscha
* **Service-ID:** `khm_national_id`
* **Datenbereich:** Identität
* **Kategorie:** NationalIDRegistry

## Eingaben

| Feld | Erforderlich | Beispiel |
| - | -: | - |
| `first_name` | Ja | `John` |
| `last_name` | Ja | `Doe` |
| `date_of_birth` | Ja | `1990-01-01` |
| `voter_id` | Ja | `12345678` |
| `gender` | Nein | `M` |
| `address.street_1` | Nein | `123 Sample Street` |
| `address.street_2` | Nein | `Unit 4` |
| `address.city` | Nein | `Sample City` |
| `address.region` | Nein | `Sample State` |
| `address.postal_code` | Nein | `10001` |
| `vendor_data` | Nein | `user-1234` |

* **Pflichteingaben:** `first_name`, `last_name`, `date_of_birth`, `voter_id`
* **Optionale Eingaben:** `gender`, `address.street_1`, `address.street_2`, `address.city`, `address.region`, `address.postal_code`, `vendor_data`
* **Einwilligung:** erforderlich
* **Verfügbarkeit im Workflow:** im Workflow verfügbar
* **Abdeckung:** \~ 80%
* **Preis:** \$0.59 pro erfolgreicher Abfrage

Nicht jedes Dokument, das dieser Dienst akzeptiert, enthält den Identifikator, über den er abfragt. Wird der Identifikator nicht aus dem Dokument extrahiert, wird die Prüfung als **nicht anwendbar** erfasst: Es wird keine Datenbank abgefragt, und Ihnen wird nichts berechnet. Bei manchen Ländern betrifft das einen großen Teil der realen Benutzer. Um diese Benutzer abzudecken, erfassen Sie den Identifikator zusätzlich aus einer Antwort in einem Fragebogen, aus einem Extraktionsfeld von Document AI oder aus einem Wert, den Sie beim Erstellen der Sitzung übergeben, und ordnen ihn im Schritt Datenbankvalidierung zu.

## Body-Parameter

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

ISO-3166-1-Alpha-3-Ländercode für diesen Datenbankdienst.

Beispiel: `KHM`

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

Array mit der ID dieses Dienstes. Wenn Sie den Dienst festlegen, bleibt die Anfrage auf genau diese Datenbank beschränkt.

Beispiel: `khm_national_id`

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

Ausdrückliche Einwilligung des Endbenutzers für diesen Dienst.

Beispiel: `true`

**first\_name** `string` *required* (default: John)

Zu validierender Vorname.

Beispiel: `John`

**last\_name** `string` *required* (default: Doe)

Zu validierender Nachname.

Beispiel: `Doe`

**date\_of\_birth** `string` *required* (default: 1990-01-01)

Geburtsdatum im Format `YYYY-MM-DD`.

Beispiel: `1990-01-01`

**voter\_id** `string` *required* (default: 12345678)

Wählerkennung.

Beispiel: `12345678`

**gender** `string`

Geschlechtsangabe, sofern die Datenbank sie erfordert.

Zulässige Werte: `M` (männlich), `F` (weiblich), `X` (andere oder unbekannt).

Beispiel: `M`

**address** `object`

Strukturiertes Objekt für die Wohnadresse. Verwenden Sie `street_1`, `street_2`, `city`, `region`, `postal_code` und `country`. Eine vollständige Legacy-Adresse als einzelne Zeichenkette wird weiterhin akzeptiert, ist aber nicht empfohlen.

Beispiel: `{"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}`

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

Ihre stabile Benutzerreferenz für diese Person, etwa Ihre interne Benutzer-ID. Didit verwendet sie, um eigenständige Prüfungen desselben Endbenutzers zuzuordnen und unnötige Duplikatmeldungen zu reduzieren.

Beispiel: `user-1234`

## Eingaberegeln und Validierungshinweise

* `address` ist für diesen Dienst optional. Sie können eine vollständige `address`-Zeichenkette senden, und Didit zerlegt sie nach Möglichkeit in strukturierte Adressbestandteile. Alternativ können Sie die strukturierten Felder explizit übergeben.
* `voter_id` muss `(?:\d{8,9}|\d{2}-\d{3}-\d{3})` entsprechen.
* Bei Adressdiensten senden Sie nach Möglichkeit strukturierte Adressfelder statt einer einzelnen `address`-Zeichenkette.
* `address.street_1` ist die Straßenadresse einschließlich Hausnummer und Straßentyp.
* `address.street_2` ist Wohnung, Einheit, Gebäude, Etage oder eine zusätzliche Adresszeile. Senden Sie es nur, wenn Ihnen diese Angabe vorliegt.
* `address.city` ist Stadt, Vorort, Bezirk, Ortschaft oder Stadtteil.
* `address.region` ist Bundesstaat, Provinz, Region oder Ort.
* `address.postal_code` ist die Postleitzahl.
* Adressbasierte Datenbankdienste erfordern mindestens Straßenadresse und Postleitzahl. Anfragen, die vor der Abfrage der Quelle abgelehnt werden, werden nicht berechnet.

## So wird die Anfrage gestellt

```bash cURL theme={null}
curl -X POST "https://verification.didit.me/v3/database-validation/" \
  -H "x-api-key: YOUR_API_KEY" \
  -F "issuing_state=KHM" \
  -F "services=khm_national_id" \
  -F "vendor_data=user-1234" \
  -F "consent=true" \
  -F "first_name=John" \
  -F "last_name=Doe" \
  -F "date_of_birth=1990-01-01" \
  -F "voter_id=12345678"
```

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

# Reads DIDIT_API_KEY.
client = Didit()

result = client.database_validation.validate(
    issuing_state="KHM",
    services=["khm_national_id"],
    consent=True,
    first_name="John",
    last_name="Doe",
    date_of_birth="1990-01-01",
    voter_id="12345678",
    vendor_data="user-1234",
)
print(result)
```

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

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

const result = await didit.databaseValidation.validate({
  issuing_state: "KHM",
  services: ["khm_national_id"],
  consent: true,
  first_name: "John",
  last_name: "Doe",
  date_of_birth: "1990-01-01",
  voter_id: "12345678",
  vendor_data: "user-1234",
});
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: "KHM",
	Services:     didit.Some([]string{"khm_national_id"}),
	Consent:      didit.Bool(true),
	FirstName:    didit.String("John"),
	LastName:     didit.String("Doe"),
	DateOfBirth:  didit.String("1990-01-01"),
	VoterID:      didit.String("12345678"),
	VendorData:   didit.String("user-1234"),
})
if err != nil {
	log.Fatal(err)
}
fmt.Printf("%+v\n", result)
```

```java Java theme={null}
import java.time.LocalDate;
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("KHM")
        .services(List.of("khm_national_id"))
        .consent(true)
        .firstName("John")
        .lastName("Doe")
        .dateOfBirth(LocalDate.parse("1990-01-01"))
        .voterId("12345678")
        .vendorData("user-1234")
        .build());
System.out.println(result);
```

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

require 'vendor/autoload.php';

use Didit\DiditClient;

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

$result = $didit->databaseValidation->validate([
    'issuing_state' => 'KHM',
    'services' => ['khm_national_id'],
    'consent' => true,
    'first_name' => 'John',
    'last_name' => 'Doe',
    'date_of_birth' => '1990-01-01',
    'voter_id' => '12345678',
    'vendor_data' => 'user-1234',
]);
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: "KHM",
  services: ["khm_national_id"],
  consent: true,
  first_name: "John",
  last_name: "Doe",
  date_of_birth: "1990-01-01",
  voter_id: "12345678",
  vendor_data: "user-1234"
)
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 = "KHM",
    Services = new string[] { "khm_national_id" },
    Consent = true,
    FirstName = "John",
    LastName = "Doe",
    DateOfBirth = "1990-01-01",
    VoterId = "12345678",
    VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
```

Jeder erfolgreiche Aufruf liefert HTTP `200` zurück. Das Feld **`outcome_code`** zeigt Ihnen, was tatsächlich geschehen ist, und unterscheidet zum Beispiel eine echte biometrische Nichtübereinstimmung (`BIOMETRIC_NO_MATCH`) von einem Selfie, das nicht gelesen werden konnte (`BIOMETRIC_IMAGE_UNUSABLE`). Der angezeigte `status` ist der Standardstatus der Funktion. Ihre konfigurierten [Aktionen für teilweise Übereinstimmung / keine Übereinstimmung](https://docs.didit.me/de/core-technology/database-validation/database-validation-warnings.md) können ihn überschreiben.

**`MATCH`**: Das Register hat die Identität bestätigt, und alle geprüften Felder stimmten überein.

```json 200 OK — MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Approved",
  "issuing_state": "KHM",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "khm_national_id",
      "service_name": "Cambodia National ID",
      "source_data": {
        "address": "123 Sample Street",
        "address_match_score": "1.000",
        "building_number": "SAMPLE-12345",
        "city": "Sample City",
        "date_of_birth": "1990-01-01",
        "first_name": "John",
        "full_name": "John Doe",
        "identification_number": "SAMPLE-ID-12345",
        "last_name": "Doe",
        "name_match_score": "1.000",
        "state": "Sample State",
        "street": "sample_value",
        "verifications": {
          "date_of_birth": true,
          "full_name": true,
          "identification_number": true
        }
      },
      "validation": {
        "date_of_birth": "full_match",
        "full_name": "full_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`PARTIAL_MATCH`**: Die Identifikationsnummer wurde gefunden, aber ein oder mehrere persönliche Felder (meist Name oder Geburtsdatum) stimmten nicht vollständig überein.

```json 200 OK — PARTIAL_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "In Review",
  "issuing_state": "KHM",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "khm_national_id",
      "service_name": "Cambodia National ID",
      "source_data": {
        "address": "123 Sample Street",
        "address_match_score": "1.000",
        "building_number": "SAMPLE-12345",
        "city": "Sample City",
        "date_of_birth": "1990-01-01",
        "first_name": "John",
        "full_name": "John Doe",
        "identification_number": "SAMPLE-ID-12345",
        "last_name": "Doe",
        "name_match_score": "1.000",
        "state": "Sample State",
        "street": "sample_value",
        "verifications": {
          "date_of_birth": true,
          "full_name": false,
          "identification_number": true
        }
      },
      "validation": {
        "date_of_birth": "full_match",
        "full_name": "no_match",
        "identification_number": "full_match"
      }
    }
  ]
}
```

**`NO_MATCH`**: Das Register hat für die übermittelten Daten keine Übereinstimmung zurückgegeben.

```json 200 OK — NO_MATCH theme={null}
{
  "request_id": "req_01H…",
  "status": "Declined",
  "issuing_state": "KHM",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "NO_MATCH",
      "service_id": "khm_national_id",
      "service_name": "Cambodia National ID",
      "source_data": {
        "date_of_birth": "NO_MATCH",
        "full_name": "NO_MATCH",
        "identification_number": "NO_MATCH"
      },
      "validation": {
        "date_of_birth": "no_match",
        "full_name": "no_match",
        "identification_number": "no_match"
      }
    }
  ]
}
```

## Zurückgegebene Daten

Welche Felder in `source_data` angezeigt werden, hängt davon ab, was das Register zurückgibt. Das generierte Beispiel für `khm_national_id` dokumentiert derzeit dieses normalisierte Format:

* `address`
* `address_match_score`
* `building_number`
* `city`
* `date_of_birth`
* `first_name`
* `full_name`
* `identification_number`
* `last_name`
* `name_match_score`
* `state`
* `street`

## Preise & SLAs

Abfragen der Cambodia National ID werden nur abgerechnet, wenn Didit von der Validierungsquelle ein eindeutiges Ergebnis erhält.

* **Preis pro Aufruf:** \$0.59 USD.
* **Abrechnung:** pro erfolgreicher Abfrage. Es fallen keine Kosten an, wenn das Register nicht erreichbar ist, wenn Pflichtfelder fehlen oder wenn die Anfrage abgelehnt wird, bevor sie die Quelle erreicht.
* **Latenz:** typischerweise p95 \< 2 s.
* **Verfügbarkeit:** 99.9% pro Quartal auf Seiten von Didit. Die Verfügbarkeit der nachgelagerten Quelle variiert je nach Land und Datensatz.

## Weiterlesen

* [Übersicht zur Datenbankvalidierung für Kambodscha](https://docs.didit.me/api-reference/database-validation/cambodia.md)
* [Übersicht Datenbankvalidierung](https://docs.didit.me/de/core-technology/database-validation/overview.md)
* [Ergebniscodes](https://docs.didit.me/de/core-technology/database-validation/database-validation-outcome-codes.md)


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