QR Code Generator — Java 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 Java implementation — the same logic the interactive tool runs, in a shareable, citable form.
// qr-code-generator — Java port: QR format information (BCH).
//
// Display snippet: assembling the module matrix is too long to show here;
// this ports formatInfoString(ecLevel, mask) from the TypeScript lib
// (src/lib/qr.ts), split into the EC-bits lookup and the BCH remainder.
// 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.
/** QR format information (BCH), ported from the canonical TS lib. */
public final class QrFormatInfo {
/** Error-correction level indicator bits (ISO/IEC 18004 table C.1); null = unknown. */
private static Integer ecFormatBits(char ecLevel) {
switch (ecLevel) {
case 'L': return 0b01;
case 'M': return 0b00;
case 'Q': return 0b11;
case 'H': return 0b10;
default: return null;
}
}
/** 15-bit format info string (MSB first) for (ecLevel, mask); null on unknown level. */
public static String formatInfo(char ecLevel, int mask) {
Integer bits = ecFormatBits(ecLevel);
return bits == null ? null : formatInfoBch((bits << 3) | mask);
}
/** 15-bit format info string (MSB first) for a 5-bit data value. */
public static String formatInfoBch(int data5) {
int v = data5 << 10;
final int G = 0x537; // BCH(15,5) generator polynomial
for (int i = 14; i >= 10; i--) {
if ((v & (1 << i)) != 0) {
v ^= G << (i - 10); // polynomial long division
}
}
int full = ((data5 << 10) | (v & 0x3FF)) ^ 0x5412; // apply the mask pattern
return String.format("%15s", Integer.toBinaryString(full)).replace(' ', '0');
}
}
// Example:
// QrFormatInfo.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 →