Zero-Trust ID Scanner for KYC: How Client-Side ID Scanning Closes the Data Exposure Gap
In today's blog post, we explain how a zero-trust ID scanner works, and why it closes the data exposure gap that cloud-based KYC solutions leave open.
# Python
engine_instance = ocrstudiosdk.OCRStudioSDKInstance.CreateFromPath(<PATH_TO_CONFIGURATION_FILE>)
session = engine_instance.CreateSession(<SIGNATURE>,
"{\"session_type\": \"document_recognition\", \"target_group_type\": \"default\", \"target_masks\": \"chn.passport.*\"}")
image = ocrstudiosdk.OCRStudioSDKImage.CreateFromFile(<PATH_TO_IMAGE>)
session.ProcessImage(image)
result = session.CurrentResult()
target = result.TargetByIndex(0)
item_it = target.ItemsBegin('string')
while not item_it.IsEqualTo(target.ItemsEnd('string')):
name = item_it.Item().Name()
value = item_it.Item().Value()
item_it.Step()
// Java
OCRStudioSDKInstance engine_instance = OCRStudioSDKInstance.CreateFromPath(<PATH_TO_CONFIGURATION_FILE>);
OCRStudioSDKSession session = engine_instance.CreateSession(<SIGNATURE>,
"{\"session_type\": \"document_recognition\", \"target_group_type\": \"default\", \"target_masks\": \"chn.passport.*\"}");
OCRStudioSDKImage image = OCRStudioSDKImage.CreateFromFile(<PATH_TO_IMAGE>);
session.ProcessImage(image);
OCRStudioSDKResult result = session.CurrentResult();
OCRStudioSDKTarget target = result.TargetByIndex(0);
for (OCRStudioSDKItemIterator item_it = target.ItemsBegin("string"); !item_it.IsEqualTo(target.ItemsEnd("string")); item_it.Step()) {
String name = item_it.Item().Name();
String value = item_it.Item().Value();
}
// C#
ocrstudio.OCRStudioSDKInstance engine_instance = ocrstudio.OCRStudioSDKInstance.CreateFromPath(<PATH_TO_CONFIGURATION_FILE>);
ocrstudio.OCRStudioSDKSession session = engine_instance.CreateSession(<SIGNATURE>,
"{\"session_type\": \"document_recognition\", \"target_group_type\": \"default\", \"target_masks\": \"chn.passport.*\"}");
ocrstudio.OCRStudioSDKImage image = ocrstudio.OCRStudioSDKImage.CreateFromFile(<PATH_TO_IMAGE>);
session.ProcessImage(image);
ocrstudio.OCRStudioSDKResult result = session.CurrentResult();
ocrstudio.OCRStudioSDKTarget target = result.TargetByIndex(0);
for (OCRStudioSDKItemIterator item_it = target.ItemsBegin("string"); !item_it.IsEqualTo(target.ItemsEnd("string")); item_it.Step()) {
String name = item_it.Item().Name();
String value = item_it.Item().Value();
}
// C++
std::unique_ptr<ocrstudio::OCRStudioSDKInstance> engine_instance(ocrstudio::OCRStudioSDKInstance::CreateFromPath(<PATH_TO_CONFIGURATION_FILE>));
std::unique_ptr<ocrstudio::OCRStudioSDKSession> session(engine_instance->CreateSession(<SIGNATURE>,
"{\"session_type\": \"document_recognition\", \"target_group_type\": \"default\", \"target_masks\": \"chn.passport.*\"}"));
std::unique_ptr<ocrstudio::OCRStudioSDKImage> image(ocrstudio::OCRStudioSDKImage::CreateFromFile(<PATH_TO_IMAGE>));
session->ProcessImage(*image);
const ocrstudio::OCRStudioSDKResult& result = session->CurrentResult();
const ocrstudio::OCRStudioSDKTarget& target = result.TargetByIndex(0);
for (auto item_it = target.ItemsBegin("string"); item_it != target.ItemsEnd("string"); item_it.Step()) {
std::string name = item_it.Item().Name();
std::string value = item_it.Item().Value();
}
// JavaScript
importScripts("ocrstudiosdk_wasm.js")
const OCRSTUDIOSDK = await OCRStudioSDK(module)
instance = new OCRSTUDIOSDK.OCRStudioSDKInstance(
"{ \"enable_lazy_initialization\": false, \"enable_delayed_initialization\": true, \"initialization_num_threads\": 1}"
)
const spawnedSession = instance.CreateSession(
<SIGNATURE>, "{\"session_type\": \"document_recognition\", \"target_group_type\": \"default\", \"target_masks\": \"chn.passport.*\"}")
// <input type="file" id="file-selector"> must exist in HTML
fileSelector = document.querySelector("#file-selector")
fileSelector.addEventListener('change', async (event) => {
const file = event.target.files[0];
const { buffer, width, height } = await getImageBuffer(file);
const rawData = new Uint8Array(buffer);
let fileBufPtr = 0;
const cap = Math.max(rawData.byteLength * 1.5, 8 * 1024 * 1024);
fileBufPtr = OCRSTUDIOSDK._malloc(cap);
OCRSTUDIOSDK.HEAPU8.set(rawData, fileBufPtr);
const channels = rawData.byteLength / (height * width);
const image = OCRSTUDIOSDK.CreateFromRawBuffer(fileBufPtr, rawData.byteLength, width, height, channels >= 3 ? rawData.byteLength / height : width, channels);
spawnedSession.ProcessImage(image);
const result = spawnedSession.CurrentResult();
});
In today's blog post, we explain how a zero-trust ID scanner works, and why it closes the data exposure gap that cloud-based KYC solutions leave open.
KYC (Know-Your-Customer) is no longer just about convenience and conversion.
Arabic is one of the six official UN languages, spoken by 400+ million people worldwide. As it is the state language in more than 20 countries across the MENA region, including the UAE, Qatar, Saudi Arabia, Kuwait, Egypt, and more, a large number of documents are issued in Arabic. Among these documents...
Server OCR SDK is an on-premise ID scanning technology designed to run within an organization’s own IT infrastructure. It enables centralized structured ID data extraction, face matching, NFC chip reading, and other OCR capabilities without relying on external recognition services.
Yes. The SDK can be deployed on the organization’s own servers, where document images and extracted data remain within the controlled IT environment. It runs on standard server hardware without requiring dedicated GPUs or additional specialized infrastructure.
Yes. By keeping sensitive data within the organization’s own infrastructure, Server OCR SDK can support compliance with data protection frameworks such as the GDPR, Brazil’s LGPD, UAE PDPL, Saudi Arabia’s PDPL, Qatar’s PDPPL, and other international and local privacy regulations.
The SDK supports passport scanning, national ID cards scanning, driver’s licenses scanning, and residence permits scanning. In total, the SDK supports over 4,000 document templates issued in 240+ countries and territories. It can also be used for bank card scanning, barcode and QR code recognition, face matching, and NFC chip reading.
Yes. Server OCR SDK can be combined with OCR Studio NFC chip reading technology. Data retrieved from the RFID/NFC chip can be cross-validated with information extracted from the visual inspection zone (VIZ) and machine-readable zone (MRZ) to identify inconsistencies between document data sources.
Server OCR SDK accepts photos, scanned images, screenshots, and video streams as input. It is built to work with imperfect source material, including skewed documents, reflections, uneven lighting, motion blur, partial crops, and other issues common in real-world document capture.
Yes. The SDK is designed for high-volume workflows and can handle multiple recognition requests within enterprise environments. This makes it suitable for organizations processing large document flows across branches, departments, customer channels, and internal systems.
Yes. Server OCR SDK can be adapted to different document recognition workflows, including custom document sets, required data fields, output formats, and integration with CRM, ERP, accounting, and other enterprise systems.
For comprehensive details about our complete
range of solutions and services.
Or contact our sales team: