mdi-flower About Me Skills Projects CV Tools Contact Me Request Service العربية
Home Tools QR Code Generator

QR Code Generator

Create, customize, and learn how QR codes work.

Input Type
{{ type.icon }} {{ type.name }}
Customize
Logo
Logo requires high error correction (H) for reliable scanning
Upload Logo
Logo Size: {{ logo_size }}%
mdi-qrcode
Version
{{ qr_version }}
Size
{{ qr_size }}×{{ qr_size }}
Mode
{{ qr_mode }}
Error Correction
{{ ec_level }}
PNG SVG

How This QR Code Was Built

Step 1 Data Analysis
First, we analyze your input to determine the best encoding mode. Numeric mode is most efficient for digits only. Alphanumeric works for uppercase letters and some symbols. Byte mode handles everything else (including URLs with lowercase letters).
Input: {{ learn_steps.analysis?.text }}
Mode: {{ learn_steps.analysis?.mode }}
Length: {{ learn_steps.analysis?.length }} characters ({{ learn_steps.analysis?.byteLength }} bytes)
Step 2 Data Encoding
The data is converted to binary. First comes a 4-bit mode indicator, then the character count, then the actual data. Different modes pack data differently — numeric groups 3 digits into 10 bits, while byte mode uses 8 bits per character.
Mode Indicator: {{ learn_steps.encoding?.modeIndicator }}
Character Count: {{ learn_steps.encoding?.charCount }}
Total Data Bits: {{ learn_steps.encoding?.totalBits }}
Full Bitstream
Hover over any segment to see how it was encoded. Each character is shown with its binary representation.
{{ label_bs_mode }}
{{ label_bs_count }}
{{ label_bs_data }}
{{ label_bs_terminator }}
{{ label_bs_pad_bits }}
{{ label_bs_pad_cw }}
Step 3 Error Correction (Reed-Solomon)
Reed-Solomon codes add redundant data so the QR can be read even if damaged. This uses Galois field arithmetic — the same math used in CDs, DVDs, and deep space communication. Higher EC levels mean more redundancy but less data capacity.
Data Codewords: {{ learn_steps.errorCorrection?.dataCodewords?.length }}
EC Codewords: {{ learn_steps.errorCorrection?.ecCodewordCount }}
Visual Matrix Construction
Watch the QR code matrix being assembled one layer at a time. Each element has a specific role — use the controls to step through or play the animation. Colors show the different structural elements.
{{ matrix_animation.step + 1 }} / {{ matrix_animation.stepNames.length }} {{ matrix_animation.stepLabels[matrix_animation.stepNames[matrix_animation.step]] }}
Finder Patterns
Separators
Timing Patterns
Alignment Patterns
Dark Module
Format Info
Data Modules
Step 4 Masking
All 8 mask patterns are tested and scored. Click any mask to preview how it looks applied to your QR code.
#0 Best
{{ learn_steps.masking?.allResults[0]?.penalty }}
#1 Best
{{ learn_steps.masking?.allResults[1]?.penalty }}
#2 Best
{{ learn_steps.masking?.allResults[2]?.penalty }}
#3 Best
{{ learn_steps.masking?.allResults[3]?.penalty }}
#4 Best
{{ learn_steps.masking?.allResults[4]?.penalty }}
#5 Best
{{ learn_steps.masking?.allResults[5]?.penalty }}
#6 Best
{{ learn_steps.masking?.allResults[6]?.penalty }}
#7 Best
{{ learn_steps.masking?.allResults[7]?.penalty }}
Mask #{{ active_mask }}
Formula: {{ maskDescriptions[active_mask] }}
Total penalty: {{ learn_steps.masking?.allResults[active_mask]?.penalty }}
P1 (runs): {{ learn_steps.masking?.allResults[active_mask]?.breakdown?.consecutive }}
P2 (blocks): {{ learn_steps.masking?.allResults[active_mask]?.breakdown?.blocks }}
P3 (finder-like): {{ learn_steps.masking?.allResults[active_mask]?.breakdown?.finderLike }}
P4 (balance): {{ learn_steps.masking?.allResults[active_mask]?.breakdown?.proportion }}
mdi-shield-check Error Correction in Action
Draw on the QR code or use presets to simulate damage. Reed-Solomon error correction recovers the missing data.
Damage: 7% 15% 25% Reset
Visual Version Comparison
QR codes use the smallest version that fits your data. See how the grid size changes across versions.
V{{ item.version }}
{{ item.size }}×{{ item.size }} modules
Math Galois Field Arithmetic (GF(2⁸))
Reed-Solomon uses Galois Field math where addition is XOR and multiplication uses log/antilog tables. Try it:
A XOR B (Addition):
{{ gfCalc.aBin }} XOR {{ gfCalc.bBin }} = {{ gfCalc.addBin }} ({{ gfCalc.add }})
A × B (Multiplication):
{{ gfCalc.a }} × {{ gfCalc.b }} = {{ gfCalc.mul }} (α^{{ gfCalc.logA }} × α^{{ gfCalc.logB }} = α^{{ gfCalc.logSum }})
Normal multiplication can produce numbers larger than 255, breaking byte-based encoding. GF(2⁸) uses polynomial arithmetic modulo the irreducible polynomial x⁸+x⁴+x³+x²+1 (0x11D). This ensures every result stays within 8 bits — the same trick used in AES encryption.
{{ dialog.title }} Close
© 2026 Ibrahim BinAlshikh — Built with WebFiori + Vuetify