About this bingo card generator
A small, dependency-free tool for one job: producing correct, pairwise-distinct bingo cards ready to print. No account, no upload, nothing you type is ever recorded.
Why it exists
Most "bingo card maker" pages online either force an account, watermark the PDF, or quietly generate cards that don't actually follow the rules — duplicate numbers in a column, or a 90-ball ticket with the wrong count per row. This tool implements the actual layout rules for both standard ball counts, checks the numbers it draws, and lets you print or save a PDF with nothing in between.
How cards are built
75-ball
For each of the five B/I/N/G/O columns, five numbers are drawn without replacement from that column's own 15-number range and placed in random row order. If the free space is enabled, the true centre cell (row 3 of the N column) is replaced with a marked free cell rather than a number.
90-ball
The generator first decides, for each of the three rows, which five of the nine columns will carry a number in that row — retrying if the resulting layout would leave any column completely empty, since a real printed ticket always has at least one number in every column. Once the layout is fixed, each column's numbers are drawn without replacement from that column's own decade range and sorted ascending before being placed top-to-bottom, matching how printed tickets read.
Words / phrases
Your list is split on line breaks and commas, trimmed, and de-duplicated without regard to capitalisation. Each card then draws a random subset of the required size (grid size squared, minus one if the free space applies) without replacement, so no card repeats a word.
How uniqueness is checked
After a card is built, its full set of visible cell values (in reading order) is used as a fingerprint. Every new card's fingerprint is compared against every card already accepted in the batch; a match is discarded and another card is generated in its place. This repeats until either the requested count is reached, or a bounded number of attempts is exhausted — which only happens when the underlying pool of possible distinct cards (typically a very short word list on a small grid) is smaller than the request. In that case the tool reports exactly how many distinct cards it actually found rather than silently repeating one or hanging indefinitely.
This was checked directly: batches of dozens of cards were generated under Node with a seeded, reproducible random source and every card's fingerprint confirmed pairwise-different; a short word list deliberately sized to allow only a handful of distinct arrangements was confirmed to stop early and report the true, smaller count.
Printing and the PDF
The Print button calls the browser's native window.print(). A dedicated print stylesheet then hides the header, navigation, controls and reference content, and gives each card its own page in plain black text on a white background regardless of whether you were viewing the page in dark or light mode. There is no PDF-generation library anywhere in this tool — "Save as PDF" in the print dialog is a capability every modern browser already ships, and it produces the file directly from that same print layout.
How it is built
- Static HTML, one stylesheet, two small scripts. No framework, no build step, no bundler.
- Nothing is uploaded. Card generation, rendering, printing and PNG export all happen locally; there is no server call for this tool to make.
- System font stack. Your operating system's UI font, so nothing has to download.
- Dark mode follows your system setting via
prefers-color-scheme— forced back to plain black-on-white specifically for print, since that is what prints cleanly on any printer.
Honest limitations
- This generates independent 90-ball tickets, not a matched six-ticket strip that partitions 1-90 exactly once each — see the note on the main page.
- It does not call numbers for you, track marked cells, or check for a winning line — it produces the cards only.
- Nothing is saved between visits. If you need the exact same set of cards again, keep the printed pages or the downloaded PNGs.
- Very long custom phrases can wrap awkwardly inside a small printed cell; short entries print most cleanly.
- The PNG export is a plain, functional rendering (grid lines and text) rather than a decorative template — it exists for quickly grabbing a single card as an image, not for professional print design.