左晓为主开发手持机充值管理机
zuoxiao
2024-02-22 dc1ab1a73f979940ed7d631418f44ca309d077c0
app/src/main/java/com/dayu/recharge/card/DomainCard.java
@@ -3,10 +3,14 @@
import com.dayu.recharge.tools.BcdUtil;
import com.dayu.recharge.tools.HexUtil;
import com.dayu.recharge.utils.MornyUtil;
import com.dayu.recharge.utils.MyCommon;
import com.tencent.bugly.crashreport.CrashReport;
import java.io.Serializable;
import java.net.IDN;
import java.nio.charset.StandardCharsets;
import java.util.Calendar;
import java.util.List;
/**
 * Copyright (C), 2023,
@@ -17,13 +21,37 @@
public class DomainCard implements Serializable {
    public String cardType = "C1";//卡类型
    public String cardType = MyCommon.DOMAIN_CARD_TYPE;//卡类型
    public String domainNumber;//域名序号 (BCD格式)
    public int domainLength;//域名长度
    //端口号为5个字节,不足5位高位补0。端口号与域名之间用”,”隔开。端口号最后以”#”结束
    public String domainName;//域名
    public String port;//端口
    public int port;//端口
    public String getDomainName() {
        return domainName;
    }
    public void setDomainName(String domainName) {
        this.domainName = domainName;
    }
    public String getDomainNumber() {
        return domainNumber;
    }
    public void setDomainNumber(String domainNumber) {
        this.domainNumber = domainNumber;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
    private byte[] asciiByte;//当前域名和端口号数组
@@ -43,6 +71,44 @@
    }
    public static DomainCard toBean(List<byte[]> data) {
        try {
            DomainCard domainCard = 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++;
                    }
                }
            }
            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;
        } catch (Exception e) {
            e.printStackTrace();
            CrashReport.postCatchedException(e);
        }
        return null;
    }
    /**
     * 用户卡0块
     */
@@ -50,10 +116,18 @@
        public byte[] toByte() {
            byte[] data = new byte[16];
            data[0] = HexUtil.hexToByte(cardType);
            byte[] domainNumbers = BcdUtil.strToBcd(domainNumber);
            data[1] = domainNumbers[0];
            if (domainNumber != null) {
                byte[] domainNumbers = BcdUtil.strToBcd(domainNumber);
                data[1] = domainNumbers[0];
            }
            domainLength = domainName.length();
            data[2] = HexUtil.hexToByte(HexUtil.get10to16(domainLength));
            String ascii = IDN.toASCII(domainName + "," + port + "#");
            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);
@@ -75,9 +149,9 @@
            byte[] data = new byte[16];
            if (asciiByte.length > 12) {
                if (asciiByte.length - 12 < 15) {
                    System.arraycopy(asciiByte, 12, data, 3, asciiByte.length - 12);
                    System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - 12);
                } else {
                    System.arraycopy(asciiByte, 12, data, 3, 15);
                    System.arraycopy(asciiByte, 12, data, 0, 15);
                }
            }
            data[15] = getByteSum(data);
@@ -95,9 +169,9 @@
            byte[] data = new byte[16];
            if (asciiByte.length > (12 + 15)) {
                if (asciiByte.length - (12 + 15) < 15) {
                    System.arraycopy(asciiByte, 12, data, 3, asciiByte.length - (12 + 15));
                    System.arraycopy(asciiByte, 12, data, 0, asciiByte.length - (12 + 15));
                } else {
                    System.arraycopy(asciiByte, 12, data, 3, 15);
                    System.arraycopy(asciiByte, 12, data, 0, 15);
                }
            }
            data[15] = getByteSum(data);