public byte[] ReadData(KeyModeEnum km, byte blokNo, string keyStr, out byte[] cardSerialData)
        {
            // byte readModel = (byte)rm;
            byte keyModel = (byte)km;

            byte[] key      = GetKeyData(keyStr);
            byte[] pData    = new byte[100];
            ulong  pdataLen = 0;

            // đọc số thẻ
            cardSerialData = SelectCard();
            if (cardSerialData == null)
            {
                return(null);
            }
            int r;

            // Kiểm tra chìa khóa
            r = MasterRDImprot.rf_M1_authentication2(0, keyModel, blokNo, key);

            r = MasterRDImprot.rf_M1_read(0, blokNo, pData, ref pdataLen);
            if (r == 0)
            {
                byte[] rData = new byte[pdataLen];
                for (int i = 0; i < (int)pdataLen; i++)
                {
                    rData[i] = pData[i];
                }
                return(rData);
            }
            return(null);
        }
        public bool WriteData(KeyModeEnum km, byte blockNo, string keyStr, string pDataStr)
        {
            //byte readModel = (byte)rm;
            byte keyModel = (byte)km;

            byte[] key   = GetKeyData(keyStr);
            byte[] pData = GetBlockData(pDataStr);
            ulong  pLen  = (ulong)pData.Length;

            SelectCard();
            int r;

            //kiem tra chia khoa
            r = MasterRDImprot.rf_M1_authentication2(0, keyModel, blockNo, key);

            r = MasterRDImprot.rf_M1_write(0, blockNo, pData);
            return(r == 0 ? true : false);
        }