From d1573513f0eada6a915c2163ce6c84451c8c1070 Mon Sep 17 00:00:00 2001 From: zuoxiao <470321431@qq.com> Date: 星期四, 13 六月 2024 15:06:05 +0800 Subject: [PATCH] 1.修复河南版本域名卡结构不同问题 2.修复齐河版本最终购水日期的bug --- henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java | 197 +++++++++++++++++++++++++++++++++++++------------ 1 files changed, 149 insertions(+), 48 deletions(-) diff --git a/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java b/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java index b686627..977ad1b 100644 --- a/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java +++ b/henanlibrary/src/main/java/com/dayu/henanlibrary/card/DomainCard.java @@ -1,5 +1,7 @@ package com.dayu.henanlibrary.card; +import android.text.TextUtils; + import com.dayu.baselibrary.tools.BcdUtil; import com.dayu.baselibrary.tools.HexUtil; import com.dayu.henanlibrary.utils.CardCommon; @@ -26,6 +28,16 @@ //绔彛鍙蜂负5涓瓧鑺傦紝涓嶈冻5浣嶉珮浣嶈ˉ0銆傜鍙e彿涓庡煙鍚嶄箣闂寸敤鈥�,鈥濋殧寮�銆傜鍙e彿鏈�鍚庝互鈥�#鈥濈粨鏉� public String domainName;//鍩熷悕 public int port;//绔彛 + + public int type;//鍩熷悕鍗℃柊涔1鍚庢湁01==0锛岄箍閭戞病鏈�01==1 + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } public String getDomainName() { return domainName; @@ -71,34 +83,80 @@ public static DomainCard toBean(List<byte[]> data) { try { - DomainCard domainCard = new DomainCard(); + DomainCard domainXinXiangCard = new DomainCard(); String domainNumber = BcdUtil.bcdToStr(data.get(0)[1]); - domainCard.domainNumber = domainNumber; - int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2])); - byte[] domainData = new byte[domainLength + 7]; - int index = 0; - for (int i = 0; i < 3; i++) { - int jIndex; - if (i == 0) { - jIndex = 3; - } else { - jIndex = 0; - } - for (int j = jIndex; j < 15; j++) { - if (index < domainData.length) { - domainData[index] = data.get(i)[j]; - index++; + if ("00".equals(domainNumber)||"01".equals(domainNumber)||"02".equals(domainNumber)){//鍋囧搴忓彿灏忎簬绛変簬2灏辫涓烘槸鏂颁埂鐨� + domainXinXiangCard.setType(0); + domainXinXiangCard.domainNumber = domainNumber; + int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[2])); + byte[] domainData = new byte[domainLength + 7]; + int index = 0; + for (int i = 0; i < 3; i++) { + int jIndex; + if (i == 0) { + jIndex = 3; + } else { + jIndex = 0; } + for (int j = jIndex; j < 15; j++) { + if (index < domainData.length) { + domainData[index] = data.get(i)[j]; + index++; + } + } + } + String domainStr = new String(domainData, StandardCharsets.US_ASCII); + if (!TextUtils.isEmpty(domainStr)){ + try { + String[] parts = domainStr.split("#")[0].split(","); + if (parts.length >= 2) { + String domainName = parts[0]; + String port = parts[1].replace("#", ""); + domainXinXiangCard.setDomainName(domainName); + domainXinXiangCard.setPort(Integer.valueOf(port)); + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } + } + }else { + domainXinXiangCard.setType(1); + int domainLength = HexUtil.get16to10(HexUtil.byteToHex(data.get(0)[1])); + byte[] domainData = new byte[domainLength + 7]; + int index = 0; + for (int i = 0; i < 3; i++) { + int jIndex; + if (i == 0) { + jIndex = 2; + } else { + jIndex = 0; + } + for (int j = jIndex; j < 15; j++) { + if (index < domainData.length) { + domainData[index] = data.get(i)[j]; + index++; + } + } + } + String domainStr = new String(domainData, StandardCharsets.US_ASCII); + + if (!TextUtils.isEmpty(domainStr)){ + try { + String[] parts = domainStr.split("#")[0].split(","); + if (parts.length >= 2) { + String domainName = parts[0]; + String port = parts[1].replace("#", ""); + domainXinXiangCard.setDomainName(domainName); + domainXinXiangCard.setPort(Integer.valueOf(port)); + } + } catch (NumberFormatException e) { + e.printStackTrace(); + } } } - String domainStr = new String(domainData, StandardCharsets.US_ASCII); - String domainName = domainStr.split(",")[0]; - String port = domainStr.split(",")[1].replace("#", ""); - domainCard.setDomainName(domainName); - domainCard.setPort(Integer.valueOf(port)); - return domainCard; + return domainXinXiangCard; } catch (Exception e) { e.printStackTrace(); CrashReport.postCatchedException(e); @@ -114,24 +172,45 @@ public byte[] toByte() { byte[] data = new byte[16]; data[0] = HexUtil.hexToByte(cardType); - if (domainNumber != null) { - byte[] domainNumbers = BcdUtil.strToBcd(domainNumber); - data[1] = domainNumbers[0]; - } - domainLength = domainName.length(); - data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength)); - String portStr = String.valueOf(port); - int lenght = portStr.length(); - for (int i = 0; i < 5 - lenght; i++) { - portStr = "0" + portStr; - } - String ascii = IDN.toASCII(domainName + "," + portStr + "#"); - asciiByte = ascii.getBytes(); - if (asciiByte.length < 12) { - System.arraycopy(asciiByte, 0, data, 3, asciiByte.length); +// 鍩熷悕鍗℃柊涔1鍚庢湁01==0锛岄箍閭戞病鏈�01==1 + if (type == 0) { + if (domainNumber != null) { + byte[] domainNumbers = BcdUtil.strToBcd(domainNumber); + data[1] = domainNumbers[0]; + } + domainLength = domainName.length(); + data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength)); + String portStr = String.valueOf(port); + int lenght = portStr.length(); + for (int i = 0; i < 5 - lenght; i++) { + portStr = "0" + portStr; + } + String ascii = IDN.toASCII(domainName + "," + portStr + "#"); + asciiByte = ascii.getBytes(); + if (asciiByte.length < 12) { + System.arraycopy(asciiByte, 0, data, 3, asciiByte.length); + } else { + System.arraycopy(asciiByte, 0, data, 3, 12); + } } else { - System.arraycopy(asciiByte, 0, data, 3, 12); + data[1] = HexUtil.hexToByte(HexUtil.get10to16(domainLength)); + String portStr = String.valueOf(port); + int lenght = portStr.length(); + for (int i = 0; i < 5 - lenght; i++) { + portStr = "0" + portStr; + } + String ascii = IDN.toASCII(domainName + "," + portStr + "#"); + asciiByte = ascii.getBytes(); + if (asciiByte.length < 13) { + System.arraycopy(asciiByte, 0, data, 1, asciiByte.length); + } else { + System.arraycopy(asciiByte, 0, data, 1, 13); + } + + + } + data[15] = getByteSum(data); return data; } @@ -145,13 +224,24 @@ public byte[] toBytes() { byte[] data = new byte[16]; - if (asciiByte.length > 12) { - if (asciiByte.length - 12 < 15) { - System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12); - } else { - System.arraycopy(asciiByte, 12, data, 0, 15); + if (type==0){ + if (asciiByte.length > 12) { + if (asciiByte.length - 12 < 15) { + System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12); + } else { + System.arraycopy(asciiByte, 12, data, 0, 15); + } + } + }else { + if (asciiByte.length > 13) { + if (asciiByte.length - 13 < 15) { + System.arraycopy(asciiByte, 13, data, 0, asciiByte.length - 12); + } else { + System.arraycopy(asciiByte, 13, data, 0, 15); + } } } + data[15] = getByteSum(data); return data; } @@ -165,13 +255,24 @@ public class Two extends BaseCard { public byte[] toBytes() { byte[] data = new byte[16]; - if (asciiByte.length > (12 + 15)) { - if (asciiByte.length - (12 + 15) < 15) { - System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - (12 + 15)); - } else { - System.arraycopy(asciiByte, 12, data, 0, 15); + if (type==0){ + if (asciiByte.length > (12 + 15)) { + if (asciiByte.length - (12 + 15) < 15) { + System.arraycopy(asciiByte, 12 + 15, data, 0, asciiByte.length - (12 + 15)); + } else { + System.arraycopy(asciiByte, 12 + 15, data, 0, 15); + } + } + }else { + if (asciiByte.length > (13 + 15)) { + if (asciiByte.length - (13 + 15) < 15) { + System.arraycopy(asciiByte, 13 + 15, data, 0, asciiByte.length - (12 + 15)); + } else { + System.arraycopy(asciiByte, 13 + 15, data, 0, 15); + } } } + data[15] = getByteSum(data); return data; } -- Gitblit v1.8.0