左晓为主开发手持机充值管理机
generallibrary/src/main/java/com/dayu/general/bean/card/AreaCard.kt
@@ -14,7 +14,7 @@
        const val CARD_TYPE = CardCommon.REGION_CARD  // 卡类型固定为0xB0
    }
    var areaNumber: Int = 0     // 国家行政区域号(12位BCD,精确到村)
    var areaNumber: String = ""     // 国家行政区域号(12位BCD,精确到村)
    var projectCode: Int = 0    // 项目编码(HEX 1-255)
    /**
@@ -35,20 +35,21 @@
            val areaCard = AreaCard()
            // 解析第0块
            val zero = data[0]
            // 解析国家行政区域号(0-5位)
            val areaCodeBytes = zero.copyOfRange(0, 6)
            areaCard.areaNumber = BcdUtil.bcdToStr(areaCodeBytes).toInt()
            areaCard.areaNumber = BcdUtil.bcdToStr(areaCodeBytes)
            // 解析项目编码(6位)
            areaCard.projectCode = HexUtil.get16To10LowHightByBytes(byteArrayOf(zero[6]))
            areaCard.projectCode = HexUtil.get16to10(HexUtil.byteToHex(zero[6]))
            // 验证卡类型和识别码
            if (HexUtil.byteToHex(zero[8]) != CARD_TYPE ||
                zero[9] != IDENTIFY_CODE_A0 ||
                zero[10] != IDENTIFY_CODE_B1 ||
                zero[11] != IDENTIFY_CODE_C2 ||
                zero[12] != IDENTIFY_CODE_89) {
                zero[12] != IDENTIFY_CODE_89
            ) {
                return null
            }
@@ -67,28 +68,28 @@
            val data = ByteArray(16)
            try {
                // 设置国家行政区域号(BCD格式,6字节,0-5位)
                val areaCodeBytes = BcdUtil.strToBcd(String.format("%012d", areaNumber))
                val areaCodeBytes = BcdUtil.strToBcd(areaNumber)
                System.arraycopy(areaCodeBytes, 0, data, 0, 6)
                // 设置项目编码(6位)
                data[6] = projectCode.toByte()
                data[6] = HexUtil.hexToByte(HexUtil.get10to16(projectCode))
                // 设置备用位(7位)
                data[7] = 0x00
                // 设置卡类型(8位)
                data[8] = HexUtil.hexToByte(CARD_TYPE)
                // 设置识别码(9-12位)
                data[9] = IDENTIFY_CODE_A0
                data[10] = IDENTIFY_CODE_B1
                data[11] = IDENTIFY_CODE_C2
                data[12] = IDENTIFY_CODE_89
                // 设置备用位(13-14位)
                data[13] = 0x00
                data[14] = 0x00
                // 设置校验和(15位)
                data[15] = getByteSum(data)
            } catch (e: Exception) {