<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Stepan Maksymov</title>
    <description>The latest articles on DEV Community by Stepan Maksymov (@stepan_maksymov_2a0f8236e).</description>
    <link>https://dev.to/stepan_maksymov_2a0f8236e</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3904213%2Ff8776336-8ea0-47de-b70e-3edf3982ed3f.jpg</url>
      <title>DEV Community: Stepan Maksymov</title>
      <link>https://dev.to/stepan_maksymov_2a0f8236e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stepan_maksymov_2a0f8236e"/>
    <language>en</language>
    <item>
      <title>I built iPhone form autofill that reads your passport — and leaves a field empty rather than guess</title>
      <dc:creator>Stepan Maksymov</dc:creator>
      <pubDate>Thu, 05 Nov 2026 12:15:15 +0000</pubDate>
      <link>https://dev.to/stepan_maksymov_2a0f8236e/i-built-iphone-form-autofill-that-reads-your-passport-and-leaves-a-field-empty-rather-than-guess-4jkp</link>
      <guid>https://dev.to/stepan_maksymov_2a0f8236e/i-built-iphone-form-autofill-that-reads-your-passport-and-leaves-a-field-empty-rather-than-guess-4jkp</guid>
      <description>&lt;p&gt;Every few months life hands you another form: a tax form, a visa application, a child benefit claim, a&lt;br&gt;
  school registration. And every time you type the same things again: your name exactly as it is in the&lt;br&gt;
  passport, the passport number, its expiry date, your date of birth in &lt;em&gt;this&lt;/em&gt; form's format, your child's&lt;br&gt;
  details, your address.&lt;/p&gt;

&lt;p&gt;All of that is already on your phone, in the scans of your own documents. So in &lt;strong&gt;Mobile PDF Scanner&lt;br&gt;
  2.6.0&lt;/strong&gt; for iPhone and iPad I added &lt;strong&gt;Fill from my documents&lt;/strong&gt;: the app reads your identity documents once,&lt;br&gt;
  and after that it fills forms from them.&lt;/p&gt;

&lt;p&gt;Here's how it works and the main rule behind it.&lt;/p&gt;

&lt;p&gt;## The user flow&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read your documents once.&lt;/strong&gt; Turn on &lt;em&gt;Find my data in documents&lt;/em&gt; in &lt;strong&gt;My data&lt;/strong&gt;. The app looks through
passports, ID cards, driving licences, residence permits, visas and work permits already in your library.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Say who is who.&lt;/strong&gt; If it finds an identity document of someone new, it asks: is this you, your partner,
your child, someone else, or &lt;em&gt;Not needed&lt;/em&gt;?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open a form and tap Fill → Fill from my documents.&lt;/strong&gt; It works on interactive PDF forms &lt;em&gt;and&lt;/em&gt; on
scanned or photographed paper forms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the rest.&lt;/strong&gt; Values the app is sure about go straight into the fields. Everything else goes to a
&lt;em&gt;Check these&lt;/em&gt; list, where you tap &lt;strong&gt;Use&lt;/strong&gt; if a suggestion is right. Tap the badge on any filled field to
see which document and page the value came from.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the form has a section about your child or partner, the app switches to that person for that section.&lt;/p&gt;

&lt;p&gt;## The main rule: an empty field is better than a wrong one&lt;/p&gt;

&lt;p&gt;An autofill that is right 95% of the time sounds great, until the other 5% is a wrong passport number on a&lt;br&gt;
  visa application.&lt;/p&gt;

&lt;p&gt;So the app fills a field only when it's sure. When two documents disagree, when a label is unclear, or when&lt;br&gt;
  it can't tell whose field it is, it &lt;strong&gt;offers&lt;/strong&gt; the value instead of writing it. Fields for other people on&lt;br&gt;
  the form (employer, preparer, attorney, witness) are left empty.&lt;/p&gt;

&lt;p&gt;In practice that meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Identity documents are read whole&lt;/strong&gt;, including the machine-readable zone (MRZ) with its ICAO check
digits. A digit misread by OCR fails the checksum, so it doesn't end up in a form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Letters and contracts&lt;/strong&gt; give only details that stand right next to the name of someone you already
have, and those are marked uncertain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bills and receipts are skipped completely.&lt;/strong&gt; The address and IBAN on an invoice usually belong to the
seller, not to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your edits stay yours.&lt;/strong&gt; If you delete or correct a value, re-reading the documents won't bring the old
one back.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;## Values follow the form, not the passport&lt;/p&gt;

&lt;p&gt;A passport says &lt;code&gt;KOVALENKO&lt;/code&gt;, &lt;code&gt;12 MAR 1988&lt;/code&gt;. A US form wants &lt;code&gt;03/12/1988&lt;/code&gt;, a German one &lt;code&gt;12.03.1988&lt;/code&gt;. The&lt;br&gt;
  app reads the form's own text to pick:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the date format (DD.MM.YYYY, MM/DD/YYYY, …)&lt;/li&gt;
&lt;li&gt;the alphabet for names (Latin or Cyrillic, with transliteration where needed)&lt;/li&gt;
&lt;li&gt;capital letters, where the form asks for them&lt;/li&gt;
&lt;li&gt;the kind of number a field accepts (a tax-number field takes only a tax number)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also handles split fields like &lt;em&gt;First / Middle / Last&lt;/em&gt; and combined ones like &lt;em&gt;City, State, ZIP&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;## Forms come back every year&lt;/p&gt;

&lt;p&gt;When reading is on, the app also remembers forms you've filled. Next year's version of the same tax form&lt;br&gt;
  gets your previous answers in the matching fields, matched by the PDF's own field names. Answers from&lt;br&gt;
  another person's form are only offered, never filled in by themselves.&lt;/p&gt;

&lt;p&gt;## Why no LLM&lt;/p&gt;

&lt;p&gt;Two reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy.&lt;/strong&gt; This is the most sensitive data people have. My data stays &lt;strong&gt;on the device&lt;/strong&gt;, encrypted&lt;br&gt;
  (Apple's CryptoKit + Keychain), it is &lt;strong&gt;not synced to iCloud&lt;/strong&gt;, it doesn't appear in search, and opening it&lt;br&gt;
  needs Face ID, Touch ID or the passcode. Nothing is sent to a server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Languages.&lt;/strong&gt; A big part of my users write in Ukrainian and Polish, and Apple's on-device model doesn't&lt;br&gt;
  support those languages. So extraction is built on rules that work for every country, not on per-country&lt;br&gt;
  templates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ICAO MRZ (passports, ID cards, visas) with check digits&lt;/li&gt;
&lt;li&gt;EU driving licence numbered fields (1., 2., 3., 4a., …)&lt;/li&gt;
&lt;li&gt;national ID numbers that carry their own checksum&lt;/li&gt;
&lt;li&gt;a multilingual dictionary of field labels, with fuzzy matching because OCR misreads small print&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On my test set of 31 real-format documents in several languages, the reader got &lt;strong&gt;every value it marked as &lt;br&gt;
  sure right&lt;/strong&gt;, and found almost all of them. Real forms (US W-9, W-4, I-9, I-765, 1040, German Kindergeld)&lt;br&gt;
  round-trip through form memory fully. That's my own test set, not a benchmark, but it's the number I tune&lt;br&gt;
  against: no wrong values first, coverage second.&lt;/p&gt;

&lt;p&gt;## Try it&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fill from my documents&lt;/strong&gt; is part of Premium, and you can try it on &lt;strong&gt;3 forms for free&lt;/strong&gt;. The button shows&lt;br&gt;
  how many you have left. Collecting and viewing My data is free, and so is filling forms by hand (typing,&lt;br&gt;
  adding fields and checkboxes, saving the copy).&lt;/p&gt;

&lt;p&gt;📱 &lt;a href="https://apps.apple.com/app/mobile-pdf-scanner/id1511734799" rel="noopener noreferrer"&gt;Mobile PDF Scanner on the App Store&lt;/a&gt;&lt;br&gt;
  📖 &lt;a href="https://mobilepdfscanner.com/guides/fill-forms-from-my-documents-iphone/" rel="noopener noreferrer"&gt;Step-by-step guide&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love feedback, especially on forms from your country that break it. Those are the cases I want to find.&lt;br&gt;
  And always read the filled copy before you sign it. 🙂&lt;/p&gt;

</description>
      <category>ios</category>
      <category>swift</category>
      <category>privacy</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
