From 0824d3547a2e5fc6e6dcf80767577184f0134e55 Mon Sep 17 00:00:00 2001 From: Henry Schimke Date: Sat, 7 Jan 2023 14:40:31 -0600 Subject: [PATCH] fix issue encoding qrcode digit only data --- Cargo.toml | 2 +- src/qrcode/encoder/EncoderTestCase.rs | 11 +++++++++++ src/qrcode/encoder/encoder.rs | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 47461d7..cc47c47 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rxing" -version = "0.2.7" +version = "0.2.8" description="A rust port of the zxing barcode library." license="Apache-2.0" repository="https://github.com/hschimke/rxing" diff --git a/src/qrcode/encoder/EncoderTestCase.rs b/src/qrcode/encoder/EncoderTestCase.rs index 5968ae2..ed7a5ea 100644 --- a/src/qrcode/encoder/EncoderTestCase.rs +++ b/src/qrcode/encoder/EncoderTestCase.rs @@ -71,6 +71,17 @@ fn testGetAlphanumericCode() { assert_eq!(-1, encoder::getAlphanumericCode(b'\0' as u32)); } +#[test] +fn test_digits_only() { + let test_data = "374833744734397449"; + let data = encoder::encode(test_data, ErrorCorrectionLevel::H).expect("encode"); + let decode = crate::qrcode::decoder::decoder::decode_bitmatrix( + &data.getMatrix().as_ref().unwrap().clone().into(), + ) + .expect("decode"); + assert_eq!(test_data, decode.getText()); +} + #[test] fn testChooseMode() { // Numeric Mode:: diff --git a/src/qrcode/encoder/encoder.rs b/src/qrcode/encoder/encoder.rs index 8b63d7e..d44e1d2 100644 --- a/src/qrcode/encoder/encoder.rs +++ b/src/qrcode/encoder/encoder.rs @@ -732,7 +732,7 @@ pub fn appendNumericBytes(content: &str, bits: &mut BitArray) -> Result<(), Exce // Encode three numeric letters in ten bits. let num2 = content.chars().nth(i + 1).unwrap() as u8 - b'0'; let num3 = content.chars().nth(i + 2).unwrap() as u8 - b'0'; - bits.appendBits((num1 * 100 + num2 * 10 + num3) as u32, 10)?; + bits.appendBits(num1 as u32 * 100 + num2 as u32 * 10 + num3 as u32, 10)?; i += 3; } else if i + 1 < length { // Encode two numeric letters in seven bits.