| | |
| | | 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) |
| | | |
| | | /** |
| | |
| | | |
| | | // 解析国家行政区域号(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 |
| | | } |
| | | |
| | |
| | | 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 |