3

我正在尝试使用 Zxing API 为客户在我们网站上上传的 aadhar 图像解码印度 aadhar 卡中的二维码。

如果二维码很大,我可以解码它并获得完整的 XML 数据。然而,尺寸较小的二维码不会被解码为二维码。它们被解码为 BarcodeFormat.UPC_E,它是一维条码,不同于二维码 QR 码。因此,小型 QR 码的输出类似于 04400621,而不是预期的 XML 输出。在线工具https://zxing.org/w/decode.jspx也会发生这种情况。

如果我们仅裁剪 aadhar 的 QR 码部分,一些小的 QR 码会被在线工具解码,但如果我们传递小图像的裁剪部分,API 将无法解码。

我正在使用 com.google.zxing.MultiFormatReader 类中的以下 API

结果解码(BinaryBitmap 图像,地图提示)

在 MultiFormatReader 库中放置断点,我可以看到 QRCodeReader 无法解码 QR 码,但是 MultiFormatOneDReader 能够解码相同的。

因此,小 QR 码似乎被解码为 BarcodeFormat.UPC_E。

粘贴下面的代码片段:

   String filePath = "xyz";
   File file = new File(filePath);
   FileInputStream fileInputStream = new FileInputStream(filePath);
   BufferedImage bufferedImage = ImageIO.read(fileInputStream);

   LuminanceSource bufferedImageLuminanceSource = new BufferedImageLuminanceSource(bufferedImage);
   BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(bufferedImageLuminanceSource));

   Map<DecodeHintType, Object> tmpHintsMap = new EnumMap<DecodeHintType, Object>(
           DecodeHintType.class);
   tmpHintsMap.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);
   tmpHintsMap.put(DecodeHintType.POSSIBLE_FORMATS,
           EnumSet.allOf(BarcodeFormat.class));
   tmpHintsMap.put(DecodeHintType.CHARACTER_SET, "ISO-8859-1");
   tmpHintsMap.put(DecodeHintType.PURE_BARCODE, Boolean.FALSE);(tried with and without this option)

   Result result = new MultiFormatReader().decode(binaryBitmap, tmpHintsMap);
4

2 回答 2

1

Aadhaar 使用出于安全原因加密的安全二维码。 链接了解更多详情

现在我们可以使用UIDAI 的基于 windows 的应用程序来读取 Secure QR 码。

于 2019-11-26T05:50:51.197 回答
0

尝试使用 zbar 库(链接在这里它适用于较大的 QR 码

于 2019-03-02T07:31:18.570 回答