package com.dayu.general.bean.card 
 | 
  
 | 
import com.dayu.baselibrary.tools.HexUtil 
 | 
import com.dayu.general.tool.BaseCommon 
 | 
import com.dayu.general.tool.CardCommon 
 | 
import java.io.Serializable 
 | 
  
 | 
/** 
 | 
 * 检查卡 
 | 
 * 用于刷卡显示控制器基本信息:控制器ID号、水量单位、电量单价,未上报的数据条数等信息 
 | 
 */ 
 | 
class CheckCard : BaseCard(), Serializable { 
 | 
    companion object { 
 | 
        const val CARD_TYPE = CardCommon.CHECK_CARD              // 卡类型:检查卡 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 写卡完成后校验是否写卡成功 
 | 
     */ 
 | 
    fun equalsCheckCard(data: List<ByteArray>?): Boolean { 
 | 
        if (data == null || data.isEmpty()) { 
 | 
            return false 
 | 
        } 
 | 
        return data[0].contentEquals(getZeroBytes()) 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 通过byte转bean 
 | 
     */ 
 | 
    fun getBean(data: List<ByteArray>): CheckCard? { 
 | 
        try { 
 | 
            val checkCard = CheckCard() 
 | 
            // 解析第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) { 
 | 
                return null 
 | 
            } 
 | 
  
 | 
            return checkCard 
 | 
        } catch (e: Exception) { 
 | 
            e.printStackTrace() 
 | 
            return null 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 生成第0块数据 
 | 
     */ 
 | 
    inner class Zero : BaseCard() { 
 | 
        fun toBytes(): ByteArray { 
 | 
            val data = ByteArray(16) 
 | 
            try { 
 | 
                // 设置备用位(0-7位) 
 | 
                for (i in 0..7) { 
 | 
                    data[i] = 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) { 
 | 
                e.printStackTrace() 
 | 
            } 
 | 
            return data 
 | 
        } 
 | 
    } 
 | 
  
 | 
    fun getZeroBytes(): ByteArray = Zero().toBytes() 
 | 
}  
 |