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

# Dänemark Ausweisverifizierung API: Datenabgleich

> Dänemark-Datenbankvalidierung über Didits Identitätsinfrastruktur: Abgleich mit amtlichen Registern. Pay-per-Call ab $2.32, ohne Verträge, ohne Mindestabnahme.

Prüft Eingabedaten anhand des Dienstes für die Personenstandsregistrierung. 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:** \~ 100%
* **Land:** Dänemark
* **Service-ID:** `dnk_national_id`
* **Datenbereich:** Identität
* **Kategorie:** NationalIDRegistry

## Eingaben

| Feld | Pflichtfeld | Beispiel |
| - | -: | - |
| `first_name` | Ja | `John` |
| `last_name` | Ja | `Doe` |
| `date_of_birth` | Ja | `1990-01-01` |
| `national_id` | Ja | `0101901234` |
| `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`, `national_id`
* **Optionale Eingaben:** `address.street_1`, `address.street_2`, `address.city`, `address.region`, `address.postal_code`, `vendor_data`
* **Einwilligung:** Nicht erforderlich
* **Verfügbarkeit im Workflow:** Im Workflow verfügbar
* **Abdeckung:** \~ 100%
* **Preis:** \$2.32 pro erfolgreicher Abfrage

Nicht jedes Dokument, das dieser Dienst akzeptiert, enthält die Kennung, über die abgefragt wird. Wenn die Kennung aus dem Dokument nicht extrahiert wird, wird die Prüfung als **nicht zutreffend** erfasst. Dabei wird keine Datenbank abgefragt und Ihnen wird nichts berechnet. In manchen Ländern betrifft dies einen großen Anteil der tatsächlichen Nutzer. Um sie abzudecken, erfassen Sie die Kennung zusätzlich über eine Antwort im Fragebogen, ein Feld aus der Document-AI-Extraktion oder einen Wert, den Sie beim Erstellen der Sitzung übermitteln, und ordnen Sie sie dem Schritt Datenbankvalidierung zu.

## Body-Parameter

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

ISO-3166-1-Ländercode mit drei Buchstaben (alpha-3) für diesen Datenbankdienst.

Beispiel: `DNK`

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

Array mit dieser Service-ID. Die Angabe des Dienstes beschränkt die Anfrage auf genau diese Datenbank.

Beispiel: `dnk_national_id`

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

Zu prüfender Vorname.

Beispiel: `John`

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

Zu prüfender Nachname.

Beispiel: `Doe`

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

Geburtsdatum im Format `YYYY-MM-DD`.

Beispiel: `1990-01-01`

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

Personenkennzahl für diesen Dienst.

Beispiel: `0101901234`

**address** `object`

Strukturiertes Objekt für die Wohnadresse. Verwenden Sie `street_1`, `street_2`, `city`, `region`, `postal_code` und `country`. Eine vollständige 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, zum Beispiel Ihre interne Benutzer-ID. Didit verwendet sie, um eigenständige Prüfungen demselben Endbenutzer zuzuordnen und Störungen durch die Erkennung von Duplikaten zu reduzieren.

Beispiel: `user-1234`

## Eingaberegeln und Hinweise zur Validierung

* `address` ist für diesen Dienst optional. Sie können eine vollständige `address`-Zeichenkette übermitteln, und Didit zerlegt sie nach Möglichkeit in strukturierte Adressbestandteile. Alternativ können Sie die strukturierten Felder explizit übermitteln.
* `national_id` muss dem Muster `\d{6}-?\d{4}` entsprechen.
* Verwenden Sie für Adressdienste 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. Übermitteln Sie sie nur, wenn Sie sie haben.
* `address.city` ist Stadt, Stadtteil, Bezirk, Ortschaft oder Viertel.
* `address.region` ist Bundesland, Provinz, Region oder Ortschaft.
* `address.postal_code` ist die Postleitzahl.
* Adressbasierte Datenbankdienste benötigen mindestens Straßenadresse und Postleitzahl. Anfragen, die vor der Quellenabfrage abgelehnt werden, werden nicht berechnet.

## Aufruf

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

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

# Reads DIDIT_API_KEY.
client = Didit()

result = client.database_validation.validate(
    issuing_state="DNK",
    services=["dnk_national_id"],
    first_name="John",
    last_name="Doe",
    date_of_birth="1990-01-01",
    national_id="0101901234",
    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: "DNK",
  services: ["dnk_national_id"],
  first_name: "John",
  last_name: "Doe",
  date_of_birth: "1990-01-01",
  national_id: "0101901234",
  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: "DNK",
	Services:     didit.Some([]string{"dnk_national_id"}),
	FirstName:    didit.String("John"),
	LastName:     didit.String("Doe"),
	DateOfBirth:  didit.String("1990-01-01"),
	NationalID:   didit.String("0101901234"),
	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("DNK")
        .services(List.of("dnk_national_id"))
        .firstName("John")
        .lastName("Doe")
        .dateOfBirth(LocalDate.parse("1990-01-01"))
        .nationalId("0101901234")
        .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' => 'DNK',
    'services' => ['dnk_national_id'],
    'first_name' => 'John',
    'last_name' => 'Doe',
    'date_of_birth' => '1990-01-01',
    'national_id' => '0101901234',
    '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: "DNK",
  services: ["dnk_national_id"],
  first_name: "John",
  last_name: "Doe",
  date_of_birth: "1990-01-01",
  national_id: "0101901234",
  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 = "DNK",
    Services = new string[] { "dnk_national_id" },
    FirstName = "John",
    LastName = "Doe",
    DateOfBirth = "1990-01-01",
    NationalId = "0101901234",
    VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
```

Jeder erfolgreiche Aufruf liefert HTTP `200` zurück. Das Feld **`outcome_code`** zeigt an, was tatsächlich geschehen ist. So wird zum Beispiel eine echte biometrische Abweichung (`BIOMETRIC_NO_MATCH`) von einem Selfie unterschieden, das nicht gelesen werden konnte (`BIOMETRIC_IMAGE_UNUSABLE`). Der angezeigte `status` ist der Standardstatus der Funktion. Ihre konfigurierten [Aktionen für teilweise Übereinstimmung und 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": "DNK",
  "match_type": "full_match",
  "validations": [
    {
      "outcome_code": "MATCH",
      "service_id": "dnk_national_id",
      "service_name": "Denmark National ID",
      "source_data": {
        "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",
        "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 Ausweisnummer wurde gefunden, aber ein oder mehrere personenbezogene 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": "DNK",
  "match_type": "partial_match",
  "validations": [
    {
      "outcome_code": "PARTIAL_MATCH",
      "service_id": "dnk_national_id",
      "service_name": "Denmark National ID",
      "source_data": {
        "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",
        "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": "DNK",
  "match_type": "no_match",
  "validations": [
    {
      "outcome_code": "NO_MATCH",
      "service_id": "dnk_national_id",
      "service_name": "Denmark 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 genau in `source_data` enthalten sind, hängt von den Daten ab, die das Register zurückgibt. Das generierte Beispiel für `dnk_national_id` dokumentiert derzeit folgende normalisierte Struktur:

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

## Preise & SLAs

Abfragen der dänischen Personenkennzahl werden nur berechnet, wenn Didit von der Validierungsquelle ein eindeutiges Ergebnis erhält.

* **Preis pro Aufruf:** \$2.32 USD.
* **Abrechnung:** pro erfolgreicher Abfrage. Ihnen wird nichts berechnet, wenn das Register nicht erreichbar ist, wenn erforderliche Felder 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 nachgelagerter Quellen variiert je nach Land und Datensatz.

## Weiterlesen

* [Übersicht: Datenbankvalidierung für Dänemark](https://docs.didit.me/api-reference/database-validation/denmark.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.