QR Code Generator — JavaScript 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 JavaScript 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 formatInfoBCH(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.
*/
const EC_FORMAT_BITS = { L: 0b01, M: 0b00, Q: 0b11, H: 0b10 };
/** 15-bit format info string (MSB first) for (ecLevel, mask). */
function formatInfo(ecLevel, mask) {
return formatInfoBCH((EC_FORMAT_BITS[ecLevel] << 3) | mask);
}
/** 15-bit format info string (MSB first) for a 5-bit data value. */
function formatInfoBCH(data5) {
let v = data5 << 10;
const G = 0x537; // BCH(15,5) generator polynomial
for (let i = 14; i >= 10; i--) {
if (v & (1 << i)) v ^= G << (i - 10); // polynomial long division
}
const full = ((data5 << 10) | (v & 0x3ff)) ^ 0x5412; // apply the mask pattern
return full.toString(2).padStart(15, '0');
}
// Example:
// formatInfo('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 →