How Uber checks an ID photo before the rider takes it
In June 2022 an Uber team described how riders in Latin America prove who they are before paying with cash. A small model on the phone looks for the ID, blur and glare, and takes the photo by itself. A server, a vendor and sometimes a person do the rest. The post gives few numbers, but the order of the steps is the lesson.

A first-time rider who wants to pay with cash has to show Uber who they are, and they may be "standing at the corner of the street when they request a ride and are asked to photograph their ID." On 9 June 2022 seven Uber authors described the check they built for that moment. It covers riders, not drivers, mostly in Latin America. Its best idea is cheap: judge the photo before it is taken.
The problem: half the failures were bad photos
"Rider verification on our platform has been live since 2016." Then, "in a 2018 survey conducted by Uber, we found that a government-backed verification method was considered the most reliable and effective by drivers." So riders would photograph an ID, and an unnamed vendor, picked after "multiple rounds of tests and performance benchmarking", would read it.
"Image analysis from Chile, Mexico, and Argentina showed us that almost half of the verification failures were caused by poor photo capture: blur, glare, overexposure, incomplete image, etc." The cards did not help: "in Brazil the RG card and driver’s license are printed on paper, the fonts differ per state, and some IDs are hand-written." Mexico alone "entails supporting more than 30 different licenses." And people keep their ID in a sleeve: "users usually carry their IDs in a plastic cover, which they do not remove for photo-taking purposes and therefore introduces glare."
How they built it
A quality gate on the phone. Before any photo is taken, a model reads the camera preview. "The client-side ML model flags images with the following issues": no ID in view, the ID cut off at the edge, blur, glare. It is one network doing four jobs: "We use a single deep-learning model, with a shared feature extractor, to address the above issues with multi-task learning. Finally, we quantized the model to run it more effectively on mobile devices." Quantising stores the model's numbers with fewer bits, so it fits and runs on a mid-range phone. "For each frame, the model provides scores for glare, blur, ID, and ID location." It runs in TensorFlow Lite.
The app takes the photo. The screen gives live hints until a frame passes. Then: "If we can get a frame with scores that are within the acceptable ranges, we use that as the document image that will be sent to our servers. No user interaction is required with this way of capturing the document." "If the model is not available, or we have a problem loading it or configuring TensorFlow, we switch the document scan mode to manual." If auto-capture times out, the rider gets a normal camera.
Three jobs on the server, three ways to do them. "A list of operations (including document classification, transcription, and fraud detection) are applied to the uploaded document images via different technologies (e.g., 3rd-party vendor, Uber in-house technology, and human review)." For Brazil's paper cards Uber built its own reader. Low-confidence or suspicious cases go to a person, and "these human reviews are completed quickly, generally in under 90 seconds."

Configurable checks, and a reason on failure. The post's pipeline figure lists the checks: authenticity, supported document type and duplicate. When a photo fails, "the backend provides customized feedback, which results in a personalized error message (e.g., tells the user to try with a different ID type)."
Fewer screens. "analytic events showed that there was drop-off at every screen, which we took to mean that the fewer the screens, the more users would get through." Animations replaced instruction pages.
Storage. "PII data, when allowed to be stored, is always saved encrypted." Only an investigation group can open it, and a routine deletes it on a per-region schedule.
What it delivered
"As of May 2022, Real-Time ID Document Check is live in Brazil, Mexico, Chile, Costa Rica, Colombia, Guatemala, El Salvador, Dominican Republic, Argentina, US, and Canada." Since an experiment at the end of 2019, "we have verified more than a million IDs." "Our tests showed that our model was accurate in the vast majority of cases, and results in production showed a decrease in low-quality images."
That is all: no accuracy, false-reject or fraud-catch rate, no latency, no training data, no size for the drop in bad photos. "A significant safety benefit" comes without numbers, and the million IDs are out of an unknown number of attempts. These are Uber-reported claims; read the post as a design, not as proof.
What has changed since
In September 2024 Uber turned the order around: it added a "Verified" rider badge in the US: "All riders will have their account information checked against trusted third-party databases or have the option to upload an ID." The photo is now the fallback. In June 2026 an Uber post, with one of the 2022 authors, described ID from the Apple wallet, validated "based on the ISO/IEC 18013-5 standard". No card photo at all, where the wallet supports it.
The building blocks are now on the shelf. Google's ML Kit Document Scanner arrived on Android in February 2024 and reached general availability in September 2025, per its release notes. "The entire document scanner flow operates on-device." It crops a page; it does not judge whether an ID is real. TensorFlow Lite now goes by LiteRT.
The hard problem has moved from bad photos to fake ones. A quality gate catches blur, not a forged file. ISO/IEC 30107-3:2023 tests attacks that "take place at the biometric capture device during presentation". CEN/TS 18099, valid from December 2024, covers injection: fake media fed in behind the camera. NIST's SP 800-63-4 of July 2025, a US federal guideline, says identity providers "SHALL implement live capture of documents during the validation process".
Why it matters for your business
Indonesian sign-ups run on document photos. Gojek's GoRide page asks for an e-KTP, a SIM C or D1, an STNK, an SKCK and an Android phone. Grab's driver page asks for photos of the original KTP, STNK, SIM and SKCK, a profile photo and a bank book. Phone photos of plastic cards in sleeves and dim rooms: the causes behind half of Uber's failures.
Uber's own system was not built here. Uber sold its Southeast Asia business to Grab in March 2018, per its S-1, and the post's eleven countries are all in the Americas. The fake-document problem is local, though. In December 2024 Group-IB reported "over 1,100 deepfake fraud attempts by one of our Indonesian clients" in loan sign-ups, using emulators, cloned apps and virtual cameras. One vendor, one client.
Checking a KTP number has its own rules. Permendagri 102/2019, amended in 2023, gives Indonesian legal entities access to population data under an agreement, and Dukcapil says that access allows only "verifikasi kesesuaian atau ketidaksesuaian": match or mismatch, not a copy of the record. The data protection law, UU 27/2022, counts a face image as biometric, a specific kind of data, and asks for an impact assessment before high-risk processing. Whether a whole KTP photo counts is a question for counsel. That is our reading as engineers, not legal advice.
How we would build it today

- Gate the frame on the phone. Keep Uber's order: the ML Kit scanner or a small quantised model on LiteRT, plus your own checks for blur, glare and the right card. One short hint at a time: "terlalu gelap", "ada pantulan", "lepas plastiknya".
- One document at a time, with its outline. Catch the wrong card before it is uploaded.
- Always leave a way out. If the model fails or times out, open a normal camera.
- Live capture only, and check the device. No gallery uploads. Check for emulators, rooted phones and virtual cameras; a quality model does not see an injected file.
- Read on the server and cross-check. Match the SIM name to the KTP and the STNK plate to the declared vehicle. Where you have a lawful route, check the NIK as match or mismatch.
- Send unsure cases to a person, and give every failure a reason the applicant can act on.
- Build privacy in. Only the fields you need, consent, encryption, a small access group, retention with a delete routine, and an impact assessment before launch.
- Measure what Uber did not publish. First-try pass rate, failure reasons, drop-off per screen, review rate, and an A/B test of the live hints against a plain camera.
For a small platform, steps 1, 3 and 6 with the KTP alone are a fair start. Add the SIM, the STNK and the cross-checks when the volume asks for them.