如何扫描新的aadhaar卡二维码并将其转换为xml或object?

问题描述 投票:0回答:2

我正在尝试将base10编码数据转换为base64或xml或任何可读格式,但没有成功。

扫描二维码后的数据如下: 2374971804270526477833002468783965837992554564899874087591661303561346432389832047870524302186901344489362368642972767716 416349990805756094923115719687656090691368051627957878187788907419297818953295185555346288172578594637886352753543271000481 717080003254556962148594350559820352806251787713278744047402230989238559317351232114240089849934148895256488140236015024800 731753594740948640957680138566468247224859669467819596919398964809164399637893729212452791889199675715949918925838319591794 702333094022248132120531152523331442741730158840977243402215102904932650832502847295644794421419704633765033761284508863534 321317394686768650111457751139630853448637215423705157211510636160227953566227527799608082928846103264491539001327407775670 834868948113753614112563650255058316849200536533335903554984254814901522086937767458409075617572843449110393213525925388131 214952874629655799772119820372255291052673056372346072235458198199995637720424196884145247220163810790179386390283738429482 893152518286247124911446073389185062482901364671389605727763080854673156754021728522287806275420847159574631844674460263574 901590412679291518508010087116598357407343835408554094619585212373168435612645646129147973594416508676872819776522537778717 985070402222824965034768103900739105784663244748432502180989441389718131079445941981681118258324511923246198334046020123727 749408128519721102477302359413240175102907322619462289965085963377744024233678337951462006962521823224880199210318367946130 004264196899778609815012001799773327514133268825910089483612283510244566484854597156100473055413090101948456959122378865704 840756793122956663218517626099291311352417342899623681483097817511136427210593032393600010728324905512596767095096153856032 112835755780472808814199620390836980020899858288860556611564167406292139646289142056168261133256777093245980048335918156712 295254776487472431445495668303900536289283098315798552328294391152828182614909451410115516297083658174657554955228963550255 866282688308751041517464999930825273776417639569977754844191402927594739069037851707477839207593911886893016618794870530622 356073909077832279869798641545167528509966656120623184120128052588408742941658045827255866966100249857968956536613250770326 334844204927432961924987891433020671754710428050564671868464658436926086493709176888821257183419013229795869757265111599482 263223604228286513011751601176504567030118257385997460972803240338899836840030438830725520798480181575861397469056536579877 274090338750406459700907704031830137890544492015701251066934352867527112361743047684237105216779177819594030160887368311805 926405114938744235859610328064947158936962470654636736991567663705830950312548447653861922078087824048793236971354828540758 657075837209006713701763902429652486225300535997260665898927924843608750347193892239342462507130025307878412116604096773706 728162016134101751551184021079984480254041743057914746472840768175369369852937574401874295943063507273467384747124843744395 375119899278823903202010381949145094804675442110869084589592876721655764753871572233276245590041302887094585204427900634246 823674277680009401177473636685542700515621164233992970974893989913447733956146698563285998205950467321954304

我尝试过旧的 adhar qr 扫描,它提供 xml 格式,我正在解析和获取数据,但如果扫描新的 adhar qr 代码获取上述格式,我也不知道它是什么格式。我需要解码这些数据并获得正确的格式,例如 xml 或对象格式。

这是我的代码:

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

    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(Simple library) is used for parsing xml data to object
                    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())) {
                   // this serializer is user for converting xml to object(PrintLetterBarcodeData) in          case of old  adhar card scanning , so i want for new adhar cared qr code , how to convert.
                        barcodeData = serializer.read(PrintLetterBarcodeData.class, stream);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }}**

// 这是我的 PrintLetterBarcodeData 类,用于将 xml 解析为对象

     @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;}
java android qr-code scanning
2个回答
0
投票

这是python解决方案,如果有人知道python请在java中转换,请在此处发送代码。

      import zlib
      details = ["version","email_mobile_status","referenceid", "name", "dob", 
      "gender", 
       "careof", "district", "landmark",                         "house", 
       "location", 
       "pincode", "postoffice", "state", "street", "subdistrict", "vtc"]
       delimeter = [-1]
       data = {}
       def initializeData(base10encodedData):
        bytes_array = base10encodedData.to_bytes(5000, 'big').lstrip(b'\x00')
         decompressed_array = zlib.decompress(bytes_array, 16 + zlib.MAX_WBITS)
        if not decompressed_array[0:2].decode("ISO-8859-1") == 'V2':
         details.pop(0)
         for i in range(len(decompressed_array)):
         if decompressed_array[i] == 255:
         delimeter.append(i)

         for i in range(len(details)):
         data[details[i]] = decompressed_array[delimeter[i] + 1:delimeter[i + 
         1]].decode("ISO-8859-1")
          data['adhaar_last_4_digit'] = data['referenceid'][0:4]
          data['adhaar_last_digit'] = data['referenceid'][3]
          data['mobile'] = False
          if int(data['email_mobile_status']) == 3 or 
          int(data['email_mobile_status']) == 2:
          data['mobile'] = True

0
投票

var 详细信息 = arrayOf( “版本”,“email_mobile_status”,“referenceid”,“名称”,“出生日期”, “性别”, “照顾”、“地区”、“地标”、“房子”、 “地点”, “pincode”、“邮局”、“州”、“街道”、“分区”、“vtc” ) var delimeter = intArrayOf(-1) var 数据:HashMap = HashMap()

open fun initializeData(base10encodedData: Int) {
    val bytes_array = ByteArray(5000)
    for (i in 0..4999) {
        bytes_array[i] = (base10encodedData shr 8 * (5000 - i - 1) and 0xFF).toByte()
    }
    var startIndex = 0
    while (startIndex < 5000 && bytes_array[startIndex].toInt() == 0) {
        startIndex++
    }
    val trimmed_array = ByteArray(5000 - startIndex)
    System.arraycopy(bytes_array, startIndex, trimmed_array, 0, 5000 - startIndex)
    val inflater = Inflater(true)
    inflater.setInput(trimmed_array)
    val decompressed_array = ByteArray(5000)
    try {
        inflater.inflate(decompressed_array)
    } catch (e: DataFormatException) {
        e.printStackTrace()
    }
    inflater.end()
    val decompressed_string = String(decompressed_array, StandardCharsets.ISO_8859_1)
    if (decompressed_string.substring(0, 2) != "V2") {
        details = Arrays.copyOfRange(details, 1, details.size)
    }
    var index = 0
    while (index < decompressed_string.length) {
        if (decompressed_string[index].code == 255) {
            delimeter = Arrays.copyOf(delimeter, delimeter.size + 1)
            delimeter[delimeter.size - 1] = index
        }
        index++
    }
    for (i in details.indices) {
        val start = delimeter[i] + 1
        val end = delimeter[i + 1]
        val value = decompressed_string.substring(start, end)
        data[details[i]] = value
    }
    data["adhaar_last_4_digit"] = data["referenceid"]!!.substring(0, 4)
    data["adhaar_last_digit"] = Character.toString(data["referenceid"]!![3])
    data["mobile"] = "false"
    if (data["email_mobile_status"]!!.toInt() == 3 ||
        data["email_mobile_status"]!!.toInt() == 2
    ) {
        data["mobile"] = "true"
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.