|  |  | 
 |  |  | package com.dayu.general.bean.card | 
 |  |  |  | 
 |  |  | import com.dayu.baselibrary.tools.HexUtil | 
 |  |  | import com.dayu.general.tool.CardCommon | 
 |  |  | import java.io.Serializable | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |  */ | 
 |  |  | 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        // 最大域名长度 | 
 |  |  |     } | 
 |  |  | 
 |  |  |             return false | 
 |  |  |         } | 
 |  |  |         return data[0].contentEquals(getZeroBytes()) && | 
 |  |  |                data[1].contentEquals(getOneBytes()) && | 
 |  |  |                data[2].contentEquals(getTwoBytes()) | 
 |  |  |                 data[1].contentEquals(getOneBytes()) && | 
 |  |  |                 data[2].contentEquals(getTwoBytes()) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |     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() | 
 |  |  |  | 
 |  |  | 
 |  |  |                 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) { | 
 |  |  | 
 |  |  |                 for (i in (domain.length - 8).coerceAtMost(15) until 15) { | 
 |  |  |                     data[i] = 0 | 
 |  |  |                 } | 
 |  |  |                  | 
 |  |  |  | 
 |  |  |                 // 设置校验和(15位) | 
 |  |  |                 data[15] = getByteSum(data) | 
 |  |  |             } catch (e: Exception) { | 
 |  |  | 
 |  |  |                 for (i in (domain.length - 23).coerceAtMost(15) until 15) { | 
 |  |  |                     data[i] = 0 | 
 |  |  |                 } | 
 |  |  |                  | 
 |  |  |  | 
 |  |  |                 // 设置校验和(15位) | 
 |  |  |                 data[15] = getByteSum(data) | 
 |  |  |             } catch (e: Exception) { | 
 |  |  | 
 |  |  |      * 验证域名格式是否正确 | 
 |  |  |      */ | 
 |  |  |     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.-]+$")) | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** |