QR Code Generator - WiFi, vCard, URL and Text Codes

    Seven kinds of payload, one symbol: a web address, a Wi-Fi network, a contact card, a text message, a phone number, an email address or plain text. The code is encoded and drawn in your browser as a vector image, so a network password on a table card never reaches an outside server.

    Parameters

    Enter data for calculations

    Decides what the phone does after the scan

    How much damage the code survives

    Preview size between 100 and 1000 pixels

    Form progress0 / 1 fields

    💡 Fill in all required fields to unlock the calculate button

    A QR code is a container, and what you put inside decides what the phone does

    Two codes can look almost the same and behave completely differently. One opens a web page, the other joins a Wi-Fi network without anybody reading the password out loud. The difference is not the picture, it is the short piece of text encoded underneath. This generator builds that text for you in seven shapes, encodes it to the ISO/IEC 18004 standard and hands back a vector image. A link like https://liczgrupa.pl/en/tools comes out as a 29 by 29 module symbol carrying 29 bytes. The same address at the highest correction level grows to 33 by 33 modules, because durability is paid for in area.

    Everything happens in your browser. The code is drawn as SVG from the module grid, so nothing you type, including a Wi-Fi password or the phone number on a contact card, is sent anywhere.

    Quick start. Pick Website address, type liczgrupa.pl, leave the rest alone. You get a version 2 symbol, 25 by 25 modules, correction level M. The generator adds https:// for you, because a code holding a bare domain with no scheme opens as a search on many phones instead of the site.

    How to build a code, step by step

    1. Data type - decides which fields appear below and which prefix goes in front of your text. Plain text stores a message, the other six build a format the phone recognizes and acts on.
    2. The content fields - only the ones belonging to the chosen type are shown. For a contact card that is a name plus any of company, phone and email; for Wi-Fi it is the network name, the password and the security type.
    3. Error correction level - how much of a damaged symbol can still be read. L recovers about 7 percent, M about 15, Q about 25, H about 30. Higher means a denser code for the same message.
    4. Size in pixels - between 100 and 1000. This is display size only. The image is vector, so it stays sharp at any scale, and the module count does not change.
    5. Read the results - the symbol, the exact text that was encoded, and a line telling you the version, the module count, the mask and how full the symbol is.

    Seven things you can put in a code

    Each type below shows the text that actually gets encoded, and the symbol it produces. The version numbers come from running the generator, not from an estimate.

    1. Website address

    Situation: a poster pointing at a landing page.
    You type: liczgrupa.pl/en/tools
    Encoded: https://liczgrupa.pl/en/tools
    Result: version 3, 29 by 29 modules, 29 bytes.
    If your address already starts with a scheme, it is left alone. Short addresses are worth the effort: every character you cut can shrink the symbol, and a smaller symbol has larger modules at the same print size, which scans from further away.

    2. Wi-Fi network

    Situation: guest network in a cafe, printed on the table card.
    You type: network Cafe Aroma Guest, password flatwhite2024, security WPA
    Encoded: WIFI:T:WPA;S:Cafe Aroma Guest;P:flatwhite2024;;
    Result: version 4, 33 by 33 modules, 47 bytes.
    The semicolon and the colon carry meaning inside this format, so a password containing one has to be escaped or the scan breaks halfway through. This generator escapes backslash, semicolon, comma, colon and quotation marks for you. A password of pa;ss is encoded as pa\;ss and arrives at the phone intact.

    3. Contact card

    Situation: the back of a business card, so nobody retypes your details.
    You type: Ada Lovelace, Analytical Engines, +441234567890, ada@example.com
    Encoded: a vCard 3.0 block with N, FN, ORG, TEL and EMAIL lines
    Result: version 9, 53 by 53 modules, 161 bytes.
    This is by far the heaviest of the seven, because a contact card is a small structured document rather than a single line. The name is split into a structured N field and a display FN field, which is what address books expect. Lines end with a carriage return and a line feed, as the vCard specification requires, not a bare line feed.

    4. Text message

    Situation: a table tent inviting people to text a keyword.
    You type: +441234567890 and BOOK to reserve a table
    Encoded: SMSTO:+441234567890:BOOK to reserve a table
    Result: version 4, 33 by 33 modules, 43 bytes.
    The phone opens its messaging app with the number and the draft already filled in. It does not send anything on its own, and no scanner will send on your behalf.

    5. Phone number

    Situation: a service sticker on a machine, so an engineer can call without typing.
    You type: +44 1234 567890
    Encoded: tel:+441234567890
    Result: version 2, 25 by 25 modules, 17 bytes.
    Spaces, brackets and dashes are stripped before encoding, because they are punctuation for humans and noise for a dialler. Keep the country code: a code on a machine outlives the assumption that everyone scanning it is in the same country.

    6. Email address

    Situation: a leaflet where you want replies rather than clicks.
    You type: hello@example.com
    Encoded: mailto:hello@example.com
    Result: version 2, 25 by 25 modules, 24 bytes.
    The scanner opens a blank message addressed to you. Subject and body are deliberately not part of this type, because a prefilled subject is the first thing people delete.

    7. Plain text

    Situation: a shelf label, a machine setting, an instruction that should not open anything.
    You type: Table 7 is reserved until 8pm
    Encoded: exactly that, character for character
    Result: version 3, 29 by 29 modules, 29 bytes.
    The scanner shows the text and stops. Use this when you want information, not an action. Line breaks are preserved, so a short multi line note survives the round trip.

    How much fits in one symbol

    A QR symbol comes in 40 sizes, called versions. Version 1 is 21 modules square and each step adds 4 modules per side, so version 40 is 177 square. The generator picks the smallest version that holds your text at the correction level you chose, which is why the same message produces a different symbol as you move from L to H. The figures below are the byte counts this tool actually accepts, measured by running it.

    Version Modules Level L Level M Level Q Level H
    1211714117
    22532262014
    32953423224
    43378624634
    537106846044
    7451541228664
    1057271213151119
    2097858666482382
    3013717321370982742
    401772953233116631273

    Two things fall out of that table. Capacity grows far faster than the symbol does, so long payloads are cheaper per byte than short ones. And the jump from L to H costs you well over half the room: at version 40 the drop is from 2953 bytes to 1273, a loss of 57 percent.

    What a correction level actually buys

    Error correction is not a setting you turn up for safety and forget. Every recovery byte occupies room a data byte could have used, and when the data no longer fits the generator moves to a larger version. A larger version at the same printed width means smaller modules, and smaller modules are harder to read. Turning correction up can therefore make a code scan worse, not better. Here is the same address at all four levels.

    Level Recovers about Symbol for the same 29 byte address Where it belongs
    L7 percentversion 2, 25 modulesscreens and clean documents, where nothing gets scuffed
    M15 percentversion 3, 29 modulesthe sensible default for print, and the setting this tool starts on
    Q25 percentversion 3, 29 moduleslabels that get handled, packaging, outdoor signage
    H30 percentversion 4, 33 modulesindustrial surfaces, or when a logo covers part of the code

    Notice that L and M differ by a whole version here, while M and Q land on the same one. Q is free in this particular case, which is worth checking before you settle for M. The generator reports the version it chose every time, so comparing two levels takes one click.

    Printing, and the margin people keep deleting

    The standard requires a clear margin of 4 modules on all four sides. It is not decoration. A scanner finds the symbol by locating the three large squares in the corners and it needs blank space around them to know where the code stops. This generator includes the margin inside the image, which is why a version 1 code is exported on a 29 by 29 grid rather than 21. Cropping tight to the black edge is the single most common reason a freshly printed code refuses to scan.

    For distance, a rule of thumb used across the labeling trade is that a code reads from roughly 10 times its own width. A code about 1.2 inches across on a table card is comfortable at arm's length; a poster meant to be scanned from 10 feet away wants a code around 12 inches wide. Because the export is SVG rather than a bitmap, enlarging it later costs nothing in quality, and the pixel setting in the form only affects how large the preview is drawn.

    Contrast matters more than color. Dark on light is what scanners expect, and inverting to light on dark stops some readers outright. If you tint the code, keep the modules substantially darker than the background rather than choosing two colors of similar weight.

    Frequently asked questions

    Do these codes expire, and can I edit one after printing?
    No and no. What this tool makes is a static code: the text is stored in the pattern itself, so it works forever and needs no service to stay alive. The trade off is that the content is fixed once printed. If you expect the destination to change, encode a short address you control and change where that address redirects. That gives you the flexibility of a dynamic code without depending on somebody else's server staying up.
    Is it safe to put my Wi-Fi password in a code?
    The encoding happens in your browser and the password is never transmitted, so the tool itself is not the risk. The printed code is. Anyone who can photograph it can read the password out of it, exactly as if you had written it on the card in plain letters. That is fine for a guest network and a poor idea for your main one. Many routers offer a separate guest network for precisely this reason.
    My code scans on one phone and not another. What changed?
    Usually one of three things. The quiet zone was cropped, so a stricter reader cannot find the symbol edge. The print is too small for the version, which happens when a long payload pushed the code to a high version and the physical size stayed the same. Or the contrast is low, often after a code was recolored to match a brand palette. Try a shorter payload first: dropping from version 9 to version 4 nearly doubles the module size at the same printed width.
    Can I put a logo in the middle?
    You can, and error correction is what makes it possible, but treat it as a budget rather than a free pass. At level H roughly 30 percent of the symbol can be lost, so a logo covering well under that usually survives. Keep it central, keep it away from the three corner squares, and test the result with more than one phone before it goes to print. If the code is going to carry a logo, choose H when you build it, not afterwards.
    Why does my contact card produce such a large code?
    Because a vCard is a structured document, not a line of text. The example on this page reaches 161 bytes and needs a version 9 symbol at 53 modules square, against 17 bytes and 25 modules for a plain phone number. Leaving out the company and the email address is the fastest way to shrink it. If the card must stay complete, print it larger rather than reaching for a lower correction level.
    What is the mask number in the results?
    A mask is a fixed pattern flipped over the data area to break up large blank patches and long runs of the same color, both of which confuse scanners. The standard defines 8 of them. The encoder builds the symbol with each in turn, scores all eight against the penalty rules in the specification, and keeps the best. The number is reported so you can see it changed when your payload did; it needs no attention from you.
    Does anything I type leave my browser?
    No. The symbol is built here, in the page, and drawn as an SVG path from the module grid. There is no image server in the chain, which matters most for the two types that carry secrets: a Wi-Fi password and the phone number on a contact card. You can confirm it the blunt way by disconnecting from the network and generating a code anyway.
    Can it handle accents, other alphabets or emoji?
    Yes. Text is encoded as UTF-8 in byte mode, so accented Latin, Cyrillic, Greek, Japanese and emoji all work. Be aware that they are not one byte each: a euro sign takes 3 bytes and most emoji take 4. The results line reports bytes rather than characters, which is the number that decides how large your symbol gets.

    Related tools

    Table Generator

    Builds a ready to paste table in HTML, Markdown or plain text, with headers and sample rows - Open the generator

    Business Name Generator

    Combines industry vocabulary with your own keywords into name candidates you can actually check - Open the generator

    Barcode Generator

    Draws EAN-13, EAN-8 and UPC-A symbols with the check digit worked out for you - Open the generator

    WiFi Password Generator

    Makes a guest network password worth putting on a card next to the code above - Open the generator

    Password Generator

    Builds strong passwords with control over length and character sets - Open the generator

    Similar calculators from this section