| | |
| | | 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.-]+$")) |
| | | } |
| | | |
| | | /** |