Generators

Tools that produce identifiers and test values on demand. All generation happens in your browser, so nothing is ever transmitted.

Choose a generator

Use the password generator for credentials, the UUID generator for identifiers, and the random number generator for draws, dice and test values. All three draw from the browser's cryptographic random source with rejection sampling, so every outcome is equally likely.

Use the mock data generator to fill a table or a fixture file, the QR code generator to turn a link or a Wi-Fi credential into something scannable, the cron expression tool to check when a schedule will actually fire, and the wheel spinner when a group needs to watch the draw happen.

Where the randomness comes from

Everything random here is drawn from crypto.getRandomValues, the browser's cryptographically secure generator, and squeezed into the range you asked for with rejection sampling rather than a modulo, so no value in the range is more likely than another. For a password that is a security property; for a raffle it is simply fairness.

The generator most code reaches for first, Math.random, is a different thing entirely: fast, predictable from a handful of outputs, and explicitly ruled out for cryptographic use by the language specification. A tool that uses it for a password is not obviously broken, which is exactly the problem.

Generated data should be safe to ship

Fixtures are only useful if running the suite cannot reach a real person, so the mock data generator draws phone numbers from the block reserved for fiction, email addresses and URLs from the RFC 2606 example domains, and IP addresses from the documentation ranges that are not routed.

That is also the argument against the tempting alternative of copying production data and scrubbing the names. Removing identifiers does not de-identify a dataset, and the scrubbed copy is still production data living somewhere with weaker access control. Generating from the schema gives you the right shape with no provenance at all.

Some of these generate a specification, not a value

A cron expression and a QR code are not random outputs; they are artefacts that some other system will interpret later, and the useful question is whether that interpretation matches what you meant. This is why the cron tool lists the next run times rather than only parsing the fields, and why the QR generator reports the version and error correction level it chose.

Check them against reality before they ship. Read the run dates for the day-of-month and day-of-week case that trips everyone up, and scan a printed code with two or three different phones before ordering a thousand copies.