Snippets listos para integrar la API en tu stack.
Reemplaza TU_TOKEN_IDVC
y http://localhost:8000
con los valores de tu entorno.
| Campo | Tipo | QuΓ© usar |
|---|---|---|
fields.run.candidato | string | RUT resuelto β usar siempre este |
fields.run.run_valid | bool | β dΓgito verificador mΓ³dulo-11 correcto |
fields.nombres.candidato | string | Nombre(s) en mayΓΊsculas |
fields.apellidos.candidato | string | Apellido(s) en mayΓΊsculas |
fields.fecha_nacimiento.candidato | string | ISO 8601 YYYY-MM-DD cuando viene del MRZ |
fields.sexo.candidato | string | M o F |
quality.case_class | string | ok aceptar Β· corrected aceptar con log Β· disagreement revisiΓ³n manual |
quality.mrz_checksums_ok | bool | Checksums MRZ vΓ‘lidos β indica confiabilidad del reverso |
portrait.b64 | string | JPEG del rostro en base64 β decodificar con base64.b64decode() |
validation.run.score | float 0β100 | Solo si se enviΓ³ run_esperado. β₯ 90 β aceptar automΓ‘ticamente |
import requests, base64, json BASE_URL = "http://localhost:8000" TOKEN = "TU_TOKEN_IDVC" def procesar_cedula(anverso_path, reverso_path, run_esperado=None): with open(anverso_path, "rb") as fa, open(reverso_path, "rb") as fr: files = { "anverso": ("anverso.jpg", fa, "image/jpeg"), "reverso": ("reverso.jpg", fr, "image/jpeg"), } data = {"idvc_token": TOKEN} if run_esperado: data["run_esperado"] = run_esperado resp = requests.post(f"{BASE_URL}/v1/cedula", files=files, data=data) resp.raise_for_status() return resp.json() resultado = procesar_cedula("frente.jpg", "reverso.jpg", run_esperado="15.601.984-4") # Campos principales run = resultado["fields"]["run"]["candidato"] nombre = resultado["fields"]["nombres"]["candidato"] apell = resultado["fields"]["apellidos"]["candidato"] calidad = resultado["quality"]["case_class"] # "ok" | "corrected" | "disagreement" print(f"RUN: {run}") print(f"Nombre: {nombre} {apell}") print(f"Calidad: {calidad}") # Guardar retrato portrait_b64 = resultado["portrait"]["b64"] if portrait_b64: with open("retrato.jpg", "wb") as f: f.write(base64.b64decode(portrait_b64)) # VerificaciΓ³n con RUT conocido if "validation" in resultado: score = resultado["validation"]["run"]["score"] print(f"Score RUT: {score}/100")
const BASE_URL = "http://localhost:8000"; const TOKEN = "TU_TOKEN_IDVC"; async function procesarCedula(anversoFile, reversoFile, runEsperado = null) { const form = new FormData(); form.append("anverso", anversoFile); // File | Blob form.append("reverso", reversoFile); form.append("idvc_token", TOKEN); if (runEsperado) form.append("run_esperado", runEsperado); const resp = await fetch(`${BASE_URL}/v1/cedula`, { method: "POST", body: form, }); if (!resp.ok) throw new Error(`HTTP ${resp.status}: ${await resp.text()}`); return resp.json(); } // ββ Uso desde navegador (input[type=file]) βββββββββββββββββββββββββββββββββββ document.getElementById("btn-procesar").addEventListener("click", async () => { const anverso = document.getElementById("input-anverso").files[0]; const reverso = document.getElementById("input-reverso").files[0]; try { const resultado = await procesarCedula(anverso, reverso, "15.601.984-4"); const { run, nombres, apellidos } = resultado.fields; console.log("RUN: ", run.candidato); console.log("Nombre: ", `${nombres.candidato} ${apellidos.candidato}`); console.log("Clase: ", resultado.quality.case_class); // Mostrar retrato if (resultado.portrait.b64) { const img = document.createElement("img"); img.src = `data:image/jpeg;base64,${resultado.portrait.b64}`; document.body.appendChild(img); } } catch (err) { console.error("Error:", err.message); } }); // ββ Uso desde Node.js (con form-data) βββββββββββββββββββββββββββββββββββββββ // import FormData from "form-data"; // import fs from "fs"; // const form = new FormData(); // form.append("anverso", fs.createReadStream("frente.jpg")); // form.append("reverso", fs.createReadStream("reverso.jpg")); // form.append("idvc_token", TOKEN); // const resp = await fetch(`${BASE_URL}/v1/cedula`, { method:"POST", body:form });
BASE="http://localhost:8000" TOKEN="TU_TOKEN_IDVC" # ββ Llamada bΓ‘sica ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ curl -s \ -F "anverso=@frente.jpg;type=image/jpeg" \ -F "reverso=@reverso.jpg;type=image/jpeg" \ -F "idvc_token=${TOKEN}" \ "${BASE}/v1/cedula" | jq # ββ Con verificaciΓ³n de RUT conocido βββββββββββββββββββββββββββββββββββββββββ curl -s \ -F "anverso=@frente.jpg;type=image/jpeg" \ -F "reverso=@reverso.jpg;type=image/jpeg" \ -F "idvc_token=${TOKEN}" \ -F "run_esperado=15.601.984-4" \ "${BASE}/v1/cedula" | jq ".fields.run, .validation.run" # ββ Extraer solo el candidato de cada campo βββββββββββββββββββββββββββββββββββ curl -s \ -F "anverso=@frente.jpg;type=image/jpeg" \ -F "reverso=@reverso.jpg;type=image/jpeg" \ -F "idvc_token=${TOKEN}" \ "${BASE}/v1/cedula" | jq "{ run: .fields.run.candidato, nombres: .fields.nombres.candidato, apellidos: .fields.apellidos.candidato, fecha_nacimiento: .fields.fecha_nacimiento.candidato, calidad: .quality.case_class }" # ββ Guardar el retrato en disco βββββββββββββββββββββββββββββββββββββββββββββββ curl -s \ -F "anverso=@frente.jpg;type=image/jpeg" \ -F "reverso=@reverso.jpg;type=image/jpeg" \ -F "idvc_token=${TOKEN}" \ "${BASE}/v1/cedula" | jq -r ".portrait.b64" | base64 -d > retrato.jpg # ββ Verificar liveness del servicio ββββββββββββββββββββββββββββββββββββββββββ curl -s "${BASE}/health"
<?php class="kw">const BASE_URL = class="str">"http:class="cmt">//localhost:8000"; class="kw">const TOKEN = class="str">"TU_TOKEN_IDVC"; class="cmt">/** * Procesa una cΓ©dula chilena y retorna el class="kw">array de resultado. */ class="kw">function procesarCedula(string $anversoPath, string $reversoPath, ?string $runEsperado = class="kw">null): class="kw">array { $fields = [ class="str">"anverso" => class="kw">new CURLFile($anversoPath, class="str">"image/jpeg", class="str">"anverso.jpg"), class="str">"reverso" => class="kw">new CURLFile($reversoPath, class="str">"image/jpeg", class="str">"reverso.jpg"), class="str">"idvc_token" => TOKEN, ]; class="kw">if ($runEsperado !== class="kw">null) { $fields[class="str">"run_esperado"] = $runEsperado; } $ch = curl_init(BASE_URL . class="str">"/v1/cedula"); curl_setopt_array($ch, [ CURLOPT_POST => class="kw">true, CURLOPT_POSTFIELDS => $fields, CURLOPT_RETURNTRANSFER => class="kw">true, CURLOPT_TIMEOUT => 30, ]); $body = curl_exec($ch); $httpStatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); class="kw">if ($httpStatus !== 200) { class="kw">throw class="kw">new RuntimeException(class="str">"HTTP $httpStatus: $body"); } class="kw">return json_decode($body, associative: class="kw">true, flags: JSON_THROW_ON_ERROR); } class="cmt">// ββ Uso βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ $resultado = procesarCedula(class="str">"frente.jpg", class="str">"reverso.jpg", class="str">"15.601.984-4"); $run = $resultado[class="str">"fields"][class="str">"run"][class="str">"candidato"]; $nombres = $resultado[class="str">"fields"][class="str">"nombres"][class="str">"candidato"]; $apellidos = $resultado[class="str">"fields"][class="str">"apellidos"][class="str">"candidato"]; $clase = $resultado[class="str">"quality"][class="str">"case_class"]; class="cmt">// class="str">"ok" | class="str">"corrected" | class="str">"disagreement" class="kw">echo class="str">"RUN: $run\n"; class="kw">echo class="str">"Nombre: $nombres $apellidos\n"; class="kw">echo class="str">"Calidad: $clase\n"; class="cmt">// Guardar retrato $b64 = $resultado[class="str">"portrait"][class="str">"b64"] ?? class="kw">null; class="kw">if ($b64) { file_put_contents(class="str">"retrato.jpg", base64_decode($b64)); class="kw">echo class="str">"Retrato guardado en retrato.jpg\n"; } class="cmt">// Score RUT class="kw">if (isset($resultado[class="str">"validation"][class="str">"run"])) { $score = $resultado[class="str">"validation"][class="str">"run"][class="str">"score"]; class="kw">echo class="str">"Score RUT: {$score}/100\n"; }