Beispiel #1
0
        /// <summary>
        /// 读卡器按会员IC卡号写一张新卡
        /// </summary>
        public static string WriteICCardID(string sNewICCard, string sRepeatCode, bool isBeep = true)
        {
            int icdev = 0;

            try
            {
                icdev = ICAccess.IC_InitComm(100); //初始化usb

                string checkStr = "";
                checkStr = check(icdev, isBeep);  //基本检查

                if (!checkStr.Equals("ok"))
                {
                    return(checkStr);
                }

                short st = 0;

                //校验出厂密码
                //1区的出厂密码和0区出厂密码不同,0区778852013144 1区FFFFFFFFFFFF
                st = ICAccess.IC_CheckPass_4442hex(icdev, ICPass_one);
                if (st != 0)
                {
                    st = ICAccess.IC_CheckPass_4442hex(icdev, CommonValue.ICStorePassword); //校验本店密码
                    if (st != 0)
                    {
                        return("提示:无法通过密码校验,可能不是本店的卡。");
                    }
                }
                else
                {
                    st = ICAccess.IC_ChangePass_4442hex(icdev, pwd_postion, ICPass_one, CommonValue.ICStorePassword);
                    if (st != 0)
                    {
                        return("提示:无法设置IC卡密码。");
                    }
                    st = ICAccess.IC_CheckPass_4442hex(icdev, CommonValue.ICStorePassword); //校验本店密码
                }
                byte[] b1 = new byte[16];
                byte[] b2 = Encoding.ASCII.GetBytes(sNewICCard);
                Array.Copy(b2, b1, b2.Length);
                b1[b2.Length] = (byte)Convert.ToInt32(sRepeatCode);
                st            = ICAccess.IC_Write(icdev, ic_postion, len, b1);
                if (st != 0)
                {
                    return("提示:无法写入IC卡号码。");
                }
                return("Success");
            }
            finally
            {
                //对卡下电,对于逻辑加密卡,下电后必须密码变为有效,即要写卡必须重新校验密码。
                ICAccess.IC_Down(icdev);
                //关闭端口,在Windows系统中,同时只能有一个设备使用端口,所以在退出系统时,请关闭端口,以便于其它设备使用。
                ICAccess.IC_ExitComm(icdev);
            }
        }
Beispiel #2
0
        /// <summary>
        /// 删除1区数据并恢复出厂密码FFFFFFFFFFFF
        /// </summary>
        /// <param name="icdev">读卡器ID</param>
        /// <param name="pwd">1区密码</param>
        /// <returns>成功true</returns>
        private static bool DeleteICCaredData(int icdev, string pwd)
        {
            byte[] b = new byte[16] {
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
            };
            int st = ICAccess.IC_CheckPass_4442hex(icdev, pwd);     //下载密码到读卡器

            if (st == 0)
            {
                st = ICAccess.IC_Write(icdev, ic_postion, len, b);                             //清空卡号
                int st1 = ICAccess.IC_ChangePass_4442hex(icdev, pwd_postion, pwd, ICPass_one); //恢复原出厂密码
                if (st == 0 && st1 == 0)
                {
                    return(true);
                }
            }

            return(false);
        }