Sample code for 30+ languages & platforms
Zig Requires Chilkat v11.7.0+

QR Code Numeric, Alphanumeric and Byte Modes

See more QR Code Examples

Demonstrates the QR encoding modes. Digits alone are stored in numeric mode, and text made only of digits, upper-case letters, space and $ % * + - . / : in alphanumeric mode. Both pack more characters into a symbol than byte mode, which is used for everything else. QrCode chooses the most compact mode the text allows, and the response reports it. A product code written in upper case therefore gives a smaller symbol than the same code in lower case.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    const fmt = try chilkat.Formats.init();
    defer fmt.deinit();
    const json = try chilkat.JsonObject.init();
    defer json.deinit();
    const json_out = try chilkat.JsonObject.init();
    defer json_out.deinit();

    // Digits only.
    json.updateString("payload.text", "00123456789012345678") catch {};
    fmt.qrCode("generate", json, json_out) catch {
        std.debug.print("{s}\n", .{try fmt.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("digits: mode {s}, version {d}\n", .{ try json_out.stringOf(alloc, "symbols[0].selectedEncoding.mode"), json_out.intOf("symbols[0].selectedEncoding.version") });

    // Upper-case letters, digits, space and - are all in the alphanumeric set.
    json.updateString("payload.text", "ORDER-12345 LOT A7 SHELF 12-C") catch {};
    fmt.qrCode("generate", json, json_out) catch {
        std.debug.print("{s}\n", .{try fmt.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("upper case: mode {s}, version {d}\n", .{ try json_out.stringOf(alloc, "symbols[0].selectedEncoding.mode"), json_out.intOf("symbols[0].selectedEncoding.version") });

    // Lower-case letters are not, so the same text in lower case needs byte mode.
    json.updateString("payload.text", "order-12345 lot a7 shelf 12-c") catch {};
    fmt.qrCode("generate", json, json_out) catch {
        std.debug.print("{s}\n", .{try fmt.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("lower case: mode {s}, version {d}\n", .{ try json_out.stringOf(alloc, "symbols[0].selectedEncoding.mode"), json_out.intOf("symbols[0].selectedEncoding.version") });

    // The mode can be named.  Byte mode can hold any text.  Naming a mode the text cannot use
    // (numeric for text with letters, for example) fails with conflictingOptions.
    json.updateString("payload.text", "00123456789012345678") catch {};
    json.updateString("encoding.qr.mode", "byte") catch {};
    fmt.qrCode("generate", json, json_out) catch {
        std.debug.print("{s}\n", .{try fmt.getLastErrorText(alloc)});
        return;
    };

    std.debug.print("digits as bytes: mode {s}, version {d}\n", .{ try json_out.stringOf(alloc, "symbols[0].selectedEncoding.mode"), json_out.intOf("symbols[0].selectedEncoding.version") });

    // The four symbols, in the order they were made:

    // image

    // Sample output:

    // digits: mode numeric, version 1
    // upper case: mode alphanumeric, version 2
    // lower case: mode byte, version 3
    // digits as bytes: mode byte, version 2
}