Skip to content

QR Code Generator — Python source

Turn any text or URL into a downloadable QR code. Full ISO encoder with all error-correction levels, versions 1-40, SVG and PNG export, colors and quiet-zone control — runs entirely in your browser.

This is the Python implementation — the same logic the interactive tool runs, in a shareable, citable form.

"""
qr-code-generator - QR format information (BCH).

Display snippet: assembling the module matrix is too long to show here;
this ports format_info_bch(data5) from the TypeScript lib (src/lib/qr.ts).
The full encoder (modes, Reed-Solomon EC, masking, matrix) lives in the
TypeScript/Go sources.

The 15-bit format string protects 5 data bits — 2 error-correction level
bits (L=01 M=00 Q=11 H=10) followed by the 3-bit mask pattern — with a
BCH(15,5) code using generator 0x537, then XORs the result with the fixed
0x5412 pattern so an all-zero string is never valid.
"""

EC_FORMAT_BITS = {"L": 0b01, "M": 0b00, "Q": 0b11, "H": 0b10}


def format_info(ec_level, mask):
    """15-bit format info string (MSB first) for (ec_level, mask)."""
    return format_info_bch((EC_FORMAT_BITS[ec_level] << 3) | mask)


def format_info_bch(data5):
    """15-bit format info string (MSB first) for a 5-bit data value."""
    v = data5 << 10
    g = 0x537  # BCH(15,5) generator polynomial
    for i in range(14, 9, -1):
        if v & (1 << i):
            v ^= g << (i - 10)  # polynomial long division
    full = ((data5 << 10) | (v & 0x3FF)) ^ 0x5412  # apply the mask pattern
    return format(full, "015b")


# Example:
#   format_info("L", 0) -> '111011111000100' (0x77C4, matching the published tables)

Also available in 13 other languages

Every CosmoDev tool ships its pure logic in TypeScript (web) and Go (CLI), with authored implementations in a dozen-plus languages — the same contract, ported. Compare all languages side by side →