All work
Case study Live

Biometric Identity Verification Platform

Biometric identity verification for government agencies and financial institutions such as banks — a fingerprint captured at the counter and matched against a national ID system.

Illustration: three fingerprint scanners feed one capture layer, which sends an encrypted request and returns a verified result.

The problem

Banks and government offices must be sure that the person in front of them is who they say they are. ID cards can be forged, and checking by eye is slow and depends on the employee.

They needed a desktop application that captures a fingerprint at the counter, matches it against the national ID records, and gives a clear answer in seconds — with whatever fingerprint scanner each branch already owns.

What I did

  • Built fingerprint capture in a desktop application used at the counter.
  • Integrated fingerprint scanners from Dermalog, IB Columbo and SecuGen behind one capture layer.
  • Built Windows capture services that talk to the scanners and pass clean images to the platform. Each capture reads several frames and keeps the best one, with a quality threshold per scanner.
  • Encrypted every verification request before it leaves the counter (JWE: RSA-OAEP-256 + A256GCM).
  • Redacted the national number and fingerprint image in every stored request and log, so the history never keeps them in plain form.
  • Connected the verification flow to the matching service against national ID records, with a result in under 1.5 seconds.
  • Built the admin portal: client institutions, plans and subscriptions, a full transactions log, and billing that counts only successful verifications.

Architecture

  1. Counter
    • Dermalog scanner
    • IB Columbo scanner
    • SecuGen scanner
  2. Desktop
    • Windows capture services
    • One capture layer (key component)
    • Desktop app
    • JWE-encrypted request
  3. Platform
    • Verification API
    • Matching against national ID records
    • Redacted transactions log
    • Admin: clients, plans, billing

The hard part: Three scanner brands, one way to capture.

Each institution already owns fingerprint scanners, and they are not the same brand. Dermalog, IB Columbo and SecuGen each come with their own SDK, their own image format and their own way of reporting quality.

Instead of writing the app three times, I put one capture layer between the scanners and the rest of the system. The app asks for “a fingerprint”; the layer talks to whatever scanner is plugged in and always returns the same clean image and quality score. A branch can change its scanner without any change to the app or the server.

Scanner Talks through The app receives
Dermalog Its own SDK Same image + quality score
IB Columbo Its own SDK Same image + quality score
SecuGen Its own SDK Same image + quality score

Results

  • <1.5 s from capture to match result
  • 3 scanner brands behind one capture layer
  • 0 app changes when a branch swaps its scanner

What I’d do differently

Agree on one image and quality standard before touching any scanner SDK. Once that contract was fixed, adding a new scanner brand became a small, isolated job.

Bank terminal verify screen: national number, finger selection, captured fingerprint with quality 86, and the encrypted request preview.

Bank terminal — pick the finger, capture from the scanner, and see the encrypted request before it is sent. Test data. · 1 / 5