Check people in from the badge they wear
Badges used to print text only, so at the door a guest had to find their ticket on their phone, or someone looked them up in the list. Each badge now prints its holder’s ticket as a QR code under the name, and the scanners you already use at the door read it.

The ticket is on every badge you print
“Print badges”, in the Registrants tab of an in-person page, now puts each person’s ticket on their badge as a QR code, centered under their name. It is 24 mm wide on an A7 and 34 mm on an A6, black on white whatever your accent color. It prints on the A4 sheets, on one badge per page for a badge printer, and on the single badge you print from a row’s ⋯ menu for someone added at the desk.
The QR code switch joins Logo, Job title, Company and Event date, and it is on each time you open the view: switch it off for a text-only badge. A registrant anonymized by your data retention setting has no ticket, so their badge prints without a code, and the view says how many badges have none.
The scanners you already use read it
The code is the ticket itself, with no name, email or link in it, so a phone camera other than your door scanner opens nothing. The scanner on the Registrants tab, the team link and the public check-in link read a badge exactly as they read the ticket, with the same answers: “Checked in”, “Already checked in” with the time they arrived, or “Not a valid ticket for this event” for a badge from another event.
Someone booked on several dates wears one badge for the whole event: the first scan checks them in, and later scans answer “Already checked in” without turning them away. Moving a person to other dates keeps their badge valid; deleting them, or anonymizing them, stops it working at the door, like their ticket.