You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何扫描新版Aadhaar卡二维码并转换为XML或对象格式?

新版Aadhaar卡二维码Base10编码解析方案

问题背景

扫描新版Aadhaar卡二维码后,得到的是一串超长Base10数字(示例如下),无法直接解析为可读格式;而旧版二维码返回XML,可通过Simple库直接解析为PrintLetterBarcodeData对象。现需实现新版数字串到可读格式/对象的转换。

示例Base10编码数据:

2374971804270526477833002468783965837992554564899874087591661303561346432389832047870524302186901344489362368642972767716416349990805756094923115719687656090691368051627957878187788907419297818953295185555346288172578594637886352753543271000481717080003254556962148594350559820352806251787713278744047402230989238559317351232114240089849934148895256488140236015024800731753594740948640957680138566468247224859669467819596919398964809164399637893729212452791889199675715949918925838319591794702333094022248132120531152523331442741730158840977243402215102904932650832502847295644794421419704633765033761284508863534321317394686768650111457751139630853448637215423705157211510636160227953566227527799608082928846103264491539001327407775670834868948113753614112563650255058316849200536533335903554984254814901522086937767458409075617572843449110393213525925388131214952874629655799772119820372255291052673056372346072235458198199995637720424196884145247220163810790179386390283738429482893152518286247124911446073389185062482901364671389605727763080854673156754021728522287806275420847159574631844674460263574901590412679291518508010087116598357407343835408554094619585212373168435612645646129147973594416508676872819776522537778717985070402222824965034768103900739105784663244748432502180989441389718131079445941981681118258324511923246198334046020123727749408128519721102477302359413240175102907322619462289965085963377744024233678337951462006962521823224880199210318367946130004264196899778609815012001799773327514133268825910089483612283510244566484854597156100473055413090101948456959122378865704840756793122956663218517626099291311352417342899623681483097817511136427210593032393600010728324905512596767095096153856032112835755780472808814199620390836980020899858288860556611564167406292139646289142056168261133256777093245980048335918156712295254776487472431445495668303900536289283098315798552328294391152828182614909451410115516297083658174657554955228963550255866282688308751041517464999930825273776417639569977754844191402927594739069037851707477839207593911886893016618794870530622356073909077832279869798641545167528509966656120623184120128052588408742941658045827255866966100249857968956536613250770326334844204927432961924987891433020671754710428050564671868464658436926086493709176888821257183419013229795869757265111599482263223604228286513011751601176504567030118257385997460972803240338899836840030438830725520798480181575861397469056536579877274090338750406459700907704031830137890544492015701251066934352867527112361743047684237105216779177819594030160887368311805926405114938744235859610328064947158936962470654636736991567663705830950312548447653861922078087824048793236971354828540758657075837209006713701763902429652486225300535997260665898927924843608750347193892239342462507130025307878412116604096773706728162016134101751551184021079984480254041743057914746472840768175369369852937574401874295943063507273467384747124843744395375119899278823903202010381949145094804675442110869084589592876721655764753871572233276245590041302887094585204427900634246823674277680009401177473636685542700515621164233992970974893989913447733956146698563285998205950467321954304

旧版解析实现

旧版二维码返回XML格式,可通过Simple XML库直接解析为实体对象:

扫描与解析代码

if (view == qr_check_box) {
    Intent intent = new Intent(AbhaCard.this, ScanActivty.class);
    startActivityForResult(intent, abhaQr);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == abhaQr && resultCode == RESULT_OK) {
        if (data != null) {
            Barcode barcode = data.getParcelableExtra("barcode");
            if (barcode != null && barcode.displayValue != null) {
                try {
                    Serializer serializer = new Persister();
                    String barcode_sting = barcode.displayValue; 
                    scanResult.setText(barcode_sting);
                    Log.e("QR_code", barcode_sting);
                    try (InputStream stream = new ByteArrayInputStream(barcode_sting.getBytes())) {
                        barcodeData = serializer.read(PrintLetterBarcodeData.class, stream);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

实体类定义

@Root(name = "PrintLetterBarcodeData")
public class PrintLetterBarcodeData {
    @Attribute(name = "uid")
    private String uid;
    @Attribute(name = "name")
    private String name;
    @Attribute(name = "gender")
    private String gender;
    @Attribute(name = "yob")
    private String yob;
    @Attribute(name = "co")
    private String co;
    @Attribute(name = "house")
    private String house;
    @Attribute(name = "street")
    private String street;
    @Attribute(name = "vtc")
    private String vtc;
    @Attribute(name = "po")
    private String po;
    @Attribute(name = "dist")
    private String dist;
    @Attribute(name = "subdist")
    private String subdist;
    @Attribute(name = "state")
    private String state;
    @Attribute(name = "pc")
    private String pc;
    @Attribute(name = "dob")
    private String dob;

    // Getters and Setters
}

新版二维码格式说明与解析步骤

新版Aadhaar二维码的长数字串是URL安全Base64编码转十进制的结果,原始数据采用CBOR(Concise Binary Object Representation)格式序列化。解析步骤如下:

  1. 将Base10数字转换为字节数组(需用BigInteger处理超大数)
  2. 把字节数组转成URL安全Base64字符串,再转换为标准Base64格式
  3. 解码标准Base64得到CBOR二进制数据
  4. 解析CBOR数据到对应实体类

实现代码

1. Base10转CBOR字节数组

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Base64;
import java.nio.charset.StandardCharsets;

public static byte[] base10ToCborBytes(String base10Str) {
    // 转换为BigInteger处理超大数
    BigInteger bigInt = new BigInteger(base10Str);
    byte[] urlSafeBase64Bytes = bigInt.toByteArray();
    
    // 移除前导零(正数转换后可能
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:01:27