#error #binary-data #human-friendly #symbols #bits #encode #input

no-std libhumancode

一个兼容 no_std 的库,提供了一种以人性化的格式对最多 150 位二进制数据进行编码的功能。

3 个稳定版本

2.0.1 2021 年 11 月 24 日
1.0.0 2021 年 11 月 17 日

#948 in 算法

MIT/Apache

48KB
640

libhumancode

Crates.io Documentation

libhumancode 是一个兼容 no_std 的 crate,提供了一种机制来将最多 150 位二进制数据编码成人性化的格式。

使用 z-base-32 编码对所有数据进行编码 - 这允许使用最少数量的符号来编码数据(与常规 base-32 不同,它需要根据编码的位数填充字符)。此外,z-base-32 被设计成易于人类使用。缺点是发送者和接收者必须就每个代码中的数据位数达成一致。

libhumancode 还使用可配置数量的错误校正符号,使用 Reed Solomon GF(2^5) 代码。对于添加的每个错误校正符号,这意味着我们可以在代码中检测到至少 1 个错误。对于添加的两个符号,我们可以纠正一个错误。请注意,这些属性不是可累加的 - 有 5 个错误校正符号时,如果输入有 2 个错误,我们总是会纠正它。如果输入有 3 个错误,我们总是会报告为错误。然而,如果输入有 4 个错误,我们可能会错误地将它“纠正”为无效代码。因此,强烈建议与用户确认代码的纠正。

示例

use libhumancode::{decode_chunk, encode_chunk};

fn main() {
    const DATA: &'static [u8] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
    const ECC_SYMBOLS: u8 = 5;
    const BITS: u8 = 128;
    const CORRECT_CODE: &'static str = "yyyo-ryar-ywdy-qnyj-befo-adeq-bhix-4os";
    const INVALID_CODE: &'static str = "!!yo-ryar-ywdy-qnyj-befo-adeq-bhix-4os";

    let encoded = encode_chunk(DATA, ECC_SYMBOLS, BITS).unwrap();
    let encoded_pretty = encoded.pretty();

    assert_eq!(encoded_pretty.as_str(), CORRECT_CODE);

    let (decoded, corrected) = decode_chunk(INVALID_CODE, ECC_SYMBOLS, BITS).unwrap();

    assert_eq!(decoded.as_bytes(), DATA);
    assert_eq!(corrected.unwrap().pretty().as_str(), CORRECT_CODE);
}

No_std

No_std 模式可以通过禁用 "std" 功能来激活。

许可协议

本项目许可协议为以下之一:

任选其一。

依赖项

~240KB