左晓为主开发手持机充值管理机
zuojincheng
2025-03-21 8521954fa97bdfc54123afb4a72755ece311db06
generallibrary/src/main/java/com/dayu/general/bean/card/DomainSettingCard.kt
@@ -1,6 +1,7 @@
package com.dayu.general.bean.card
import com.dayu.baselibrary.tools.HexUtil
import com.dayu.general.tool.CardCommon
import java.io.Serializable
/**
@@ -9,12 +10,9 @@
 */
class DomainSettingCard : BaseCard(), Serializable {
    companion object {
        const val CARD_TYPE = "B6"              // 卡类型:域名设置卡
        const val IDENTIFY_CODE_A0 = 0xA0.toByte()  // 识别码A0
        const val IDENTIFY_CODE_B1 = 0xB1.toByte()  // 识别码B1
        const val IDENTIFY_CODE_C2 = 0xC2.toByte()  // 识别码C2
        const val IDENTIFY_CODE_89 = 0x89.toByte()  // 识别码89
        const val CARD_TYPE = CardCommon.AREA_CARD              // 卡类型:域名设置卡
        const val MAX_DOMAIN_ROUTE = 4          // 最大域名路数
        const val MAX_DOMAIN_LENGTH = 38        // 最大域名长度
    }
@@ -31,8 +29,8 @@
            return false
        }
        return data[0].contentEquals(getZeroBytes()) &&
               data[1].contentEquals(getOneBytes()) &&
               data[2].contentEquals(getTwoBytes())
                data[1].contentEquals(getOneBytes()) &&
                data[2].contentEquals(getTwoBytes())
    }
    /**
@@ -41,30 +39,31 @@
    fun getBean(data: List<ByteArray>): DomainSettingCard? {
        try {
            val domainSettingCard = DomainSettingCard()
            // 解析第0块
            val zero = data[0]
            // 验证卡类型(8位)
            if (HexUtil.byteToHex(zero[8]) != CARD_TYPE) {
                return null
            }
            // 验证识别码(9-12位)
            if (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
            }
            // 解析域名路数(13位)
            val routeNumber = zero[13].toInt()
            if (routeNumber !in 1..MAX_DOMAIN_ROUTE) {
                return null
            }
            domainSettingCard.domainRouteNumber = routeNumber
            // 解析域名长度(14位)
            domainSettingCard.domainLength = zero[14].toInt()
@@ -116,22 +115,22 @@
                for (i in domain.length.coerceAtMost(8) until 8) {
                    data[i] = 0
                }
                // 设置卡类型(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位)
                data[13] = domainRouteNumber.toByte()
                // 设置域名长度(14位)
                data[14] = domain.length.toByte()
                // 设置校验和(15位)
                data[15] = getByteSum(data)
            } catch (e: Exception) {
@@ -156,7 +155,7 @@
                for (i in (domain.length - 8).coerceAtMost(15) until 15) {
                    data[i] = 0
                }
                // 设置校验和(15位)
                data[15] = getByteSum(data)
            } catch (e: Exception) {
@@ -181,7 +180,7 @@
                for (i in (domain.length - 23).coerceAtMost(15) until 15) {
                    data[i] = 0
                }
                // 设置校验和(15位)
                data[15] = getByteSum(data)
            } catch (e: Exception) {
@@ -195,9 +194,9 @@
     * 验证域名格式是否正确
     */
    fun isValidDomain(): Boolean {
        return domain.isNotEmpty() &&
               domain.length <= MAX_DOMAIN_LENGTH &&
               domain.matches(Regex("^[a-zA-Z0-9.-]+$"))
        return domain.isNotEmpty() &&
                domain.length <= MAX_DOMAIN_LENGTH &&
                domain.matches(Regex("^[a-zA-Z0-9.-]+$"))
    }
    /**