C# 読み取りおよび書き込み T5557 チップ カード コピー ID アクセス コントロール カード ソース コード

        T5557 カードは、米国の Atmel Corporation が製造する多機能非接触無線周波チップ カードです。125KHz の低周波カードであり、中国で大きなアプリケーション市場を持っています。たとえば、多くのホテルのアクセス制御カードが T5557 を使用しています。カード。このチップには合計 330 ビット (ビット) の EPROM が搭載されています (10 ブロックに分散され、各ブロックは 33 ビットです)。ページ 0 のブロック 0 は、T5557 の動作モードを設定するために予約されているパラメータ設定ブロックです。ページ 0 のブロック 7 は、ユーザー データ ブロックとして使用することも、すべてのデータを保護するパスワード (構成ブロックでパスワード機能が有効な場合) として使用して、データの不正な書き換えを防止することもできます。1 ページのブロック 1 と 2 には、製造元の情報と一意の工場 ID が格納されます。これらは読み取りのみ可能で、変更できません。T5567 および T5577 は、T5557 のアップグレード バージョンです。

        T5557 カードのパラメータ設定ブロックを変更することで、t5557 カードを ID カードおよび HID カードとしてシミュレートできるため、アクセス コントロール カードのコピー業界で広く使用されています。

この例で使用されているカード発行会社の紹介: T5557 T5567 T5577 低周波 RFID リーダー EM4100 HID カード デュプリケーター ホテル キー カード - タオバオ.com (taabao.com)

  1. 関数宣言

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;  //调用动态库一定要加入这个引用


namespace idcardreader
{
    public partial class Form1 : Form
    {
        CheckBox[] myCheckBox = new CheckBox[14];
        TextBox[] myTextBox = new TextBox[14]; 

        //------------------------------------------------------------------------------------------------------------------------------------------------------
        //外部函数声明:让设备发出声响
        [DllImport("OUR_IDR.dll", EntryPoint = "idr_beep", CallingConvention = CallingConvention.StdCall)]
        static extern byte idr_beep(UInt32 xms);//xms单位为毫秒 
	   //------------------------------------------------------------------------------------------------------------------------------------------------------    
        //读取设备编号,可做为软件加密狗用,也可以根据此编号在公司网站上查询保修期限
        [DllImport("OUR_IDR.dll", EntryPoint = "pcdgetdevicenumber", CallingConvention = CallingConvention.StdCall)]
        static extern byte pcdgetdevicenumber(byte[] devicenumber);//devicenumber用于返回编号 
        //------------------------------------------------------------------------------------------------------------------------------------------------------    
        //只读EM4100卡号
        [DllImport("OUR_IDR.dll", EntryPoint = "idr_read", CallingConvention = CallingConvention.StdCall)]
        public static extern byte idr_read(byte[] serial);//serial返回卡号        
	    //------------------------------------------------------------------------------------------------------------------------------------------------------    
        //只读卡号,只读一次EM4100卡,必须拿开卡才能再读到
        [DllImport("OUR_IDR.dll", EntryPoint = "idr_read_once", CallingConvention = CallingConvention.StdCall)]
        public static extern byte idr_read_once(byte[] serial);//serial返回卡号
        //------------------------------------------------------------------------------------------------------------------------------------------------------
        //T5557卡写配置块
        [DllImport("OUR_IDR.dll", EntryPoint = "t5557_init", CallingConvention = CallingConvention.StdCall)]
        public static extern byte  t5557_init(byte ctrlword,byte[] seria,byte[] key,byte[] configdata,byte[] newkey);
        //------------------------------------------------------------------------------------------------------------------------------------------------------
        //T5557卡读卡
        [DllImport("OUR_IDR.dll", EntryPoint = "t5557_read", CallingConvention = CallingConvention.StdCall)]
        public static extern byte  t5557_read(byte ctrlword,byte[] seria,byte[] key,byte[] blockflag,byte[] readdata);
        //------------------------------------------------------------------------------------------------------------------------------------------------------
        //T5557卡写卡
        [DllImport("OUR_IDR.dll", EntryPoint = "t5557_write", CallingConvention = CallingConvention.StdCall)]
        public static extern byte  t5557_write(byte ctrlword,byte[] seria,byte[] key,byte[] blockflag,byte[] writedata);
        //------------------------------------------------------------------------------------------------------------------------------------------------------
        //T5557卡改密码
        [DllImport("OUR_IDR.dll", EntryPoint = "t5557_changekey", CallingConvention = CallingConvention.StdCall)]
        public static extern byte  t5557_changekey(byte ctrlword,byte[] seria,byte[] oldkey,byte[] newkey);
        //------------------------------------------------------------------------------------------------------------------------------------------------------
        //用T5557卡制作ID卡(也就是EM4100及兼容卡)
        [DllImport("OUR_IDR.dll", EntryPoint = "t5557_to4100", CallingConvention = CallingConvention.StdCall)]
        public static extern byte  t5557_to4100(byte ctrlword,byte[] seria,byte[] oldkey,byte[] newkey,byte[] myuidbuf);
        //-----------------------------------------------------------------------------------------------------------------------------------------------------        
        //只读HID卡号
        [DllImport("OUR_IDR.dll", EntryPoint = "hid_read", CallingConvention = CallingConvention.StdCall)]
        public static extern byte hid_read(byte[] serial);//serial返回卡号 
        //------------------------------------------------------------------------------------------------------------------------------------------------------
        //用T5557卡制作HID卡
        [DllImport("OUR_IDR.dll", EntryPoint = "t5557_tohid", CallingConvention = CallingConvention.StdCall)]
        public static extern byte t5557_tohid(byte ctrlword, byte[] seria, byte[] oldkey, byte[] newkey, byte[] myuidbuf);


        byte NEEDSERIAL = 0x01;   //需要只对指定系列号的卡操作
        byte NEEDKEY = 0x02;      //需要用密码认证
        byte LOCKBIT = 0x04;      //锁定配置块或数据块,仅对   t5557_init,t5557_write ,t5557_changekey函数有效
        byte KEYENABLE = 0x08;    //启用本卡的密码功能
        byte RESETCARD = 0x10;    //操作成功后重启卡片

2. T5557 カード ブロックのデータを読み取ります。 

        private void button1_Click(object sender, EventArgs e)
        {
            byte status;     //存放返回值
            int j;
            byte myctrlword = 0x00;  //控制字
            byte[] oldpicckey = new byte[4];  //密码
            byte[] mypiccserial = new byte[6];  //卡序列号
            byte[] mypiccdata = new byte[50];  //读卡数据缓冲:卡无线转输分频比、卡内容长度(字节数),及最多返回12个块的数据
            byte[] mypiccblockflag = new byte[2]; //指定读哪一块
            string PasswStr = textBox14.Text.Trim();
            string seriaStr = textBox15.Text.Trim();

            if (checkBox1.Checked)  //本次操作需要密码验证
            {
                myctrlword =(byte)(myctrlword+ NEEDKEY);
                try
                {
                    oldpicckey[0] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(0, 2), 16));
                    oldpicckey[1] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(2, 2), 16));
                    oldpicckey[2] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(4, 2), 16));
                    oldpicckey[3] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(6, 2), 16));
                }
                catch {
                    MessageBox.Show("认证密码输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox14.Select();
                    return;
                }
            }

            if (checkBox2.Checked)  //仅操作指定卡号的卡
            {
                try
                {
                    myctrlword = (byte)(myctrlword + NEEDSERIAL);
                    mypiccserial[0] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(0, 2), 16));
                    mypiccserial[1] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(2, 2), 16));
                    mypiccserial[2] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(4, 2), 16));
                    mypiccserial[3] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(6, 2), 16));
                    mypiccserial[4] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(8, 2), 16));
                    mypiccserial[5] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(10, 2), 16));
                }
                catch
                {
                    MessageBox.Show("卡号输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox15.Select();
                    return;
                }
            }

            j = 0;
            mypiccblockflag[0] = 0x00;
            for (int i = 0; i < 8; i++)
            {
                if (myCheckBox[i].Checked)
                {
                    mypiccblockflag[0] = (byte)(mypiccblockflag[0] + Math.Pow(2, i));
                    j++;
                }
            }

            mypiccblockflag[1] = 0x00;
            for (int i = 0; i < 4; i++)
            {
                if (myCheckBox[8+i].Checked)
                {
                    mypiccblockflag[1] = (byte)(mypiccblockflag[1] + Math.Pow(2, i+1));
                    j++;
                }
            }

            status = t5557_read(myctrlword,mypiccserial,oldpicckey,mypiccblockflag,mypiccdata);
            if (status == 0)
            {
                string blockdata = "";
                for (int i = 0; i < mypiccdata[1]; i++)
                {
                    blockdata = blockdata + mypiccdata[2+i].ToString("X2");
                }

                j = 0;
                for (int i = 0; i < 12; i++)
                {
                    if (myCheckBox[i].Checked)
                    {
                        myTextBox[i].Text = blockdata.Substring(j, 8);
                        j = j + 8;
                    }
                }

                seriaStr = "";
                for(int i=0 ;i<6;i++){
                    seriaStr = seriaStr + mypiccserial[i].ToString("X2"); 
                }
                idr_beep(30);
                MessageBox.Show("读卡成功,卡无线转输分频比:" + mypiccdata[0].ToString("D") + ",卡号:" + seriaStr, "提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);


            }
            else { MessageErrInf(status); }

        }

3. T5557カードブロックのデータを書き換えます

private void button3_Click(object sender, EventArgs e)
        {
            byte status;     //存放返回值
            int j;
            byte myctrlword = 0x00;               //控制字
            byte[] oldpicckey = new byte[4];      //密码
            byte[] mypiccserial = new byte[6];    //卡序列号
            byte[] mypiccdata = new byte[50];     //写卡数据缓冲
            byte[] mypiccblockflag = new byte[2]; //指定读哪一块
            string PasswStr = textBox14.Text.Trim();
            string seriaStr = textBox15.Text.Trim();

            int chtxt=Form1_chedkdata();
            if (chtxt != 100)
            {
                MessageBox.Show("写卡数据输入错误,请重新输入!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                myTextBox[chtxt].Select(); 
                return;
            }

            if (checkBox1.Checked)  //本次操作需要密码验证
            {
                myctrlword = (byte)(myctrlword + NEEDKEY);
                try
                {
                    oldpicckey[0] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(0, 2), 16));
                    oldpicckey[1] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(2, 2), 16));
                    oldpicckey[2] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(4, 2), 16));
                    oldpicckey[3] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(6, 2), 16));
                }
                catch
                {
                    MessageBox.Show("认证密码输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox14.Select();
                    return;
                }
            }

            if (checkBox2.Checked)  //仅操作指定卡号的卡
            {
                try
                {
                    myctrlword = (byte)(myctrlword + NEEDSERIAL);
                    mypiccserial[0] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(0, 2), 16));
                    mypiccserial[1] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(2, 2), 16));
                    mypiccserial[2] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(4, 2), 16));
                    mypiccserial[3] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(6, 2), 16));
                    mypiccserial[4] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(8, 2), 16));
                    mypiccserial[5] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(10, 2), 16));
                }
                catch
                {
                    MessageBox.Show("卡号输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox15.Select();
                    return;
                }
            }

            j = 0;
            mypiccblockflag[0] = 0x00;
            for (int i = 0; i < 8; i++)
            {
                if (myCheckBox[i].Checked)
                {
                    mypiccblockflag[0] = (byte)(mypiccblockflag[0] + Math.Pow(2, i));
                    j++;
                }
            }

            mypiccblockflag[1] = 0x00;
            for (int i = 0; i < 4; i++)
            {
                if (myCheckBox[8 + i].Checked)
                {
                    mypiccblockflag[1] = (byte)(mypiccblockflag[1] + Math.Pow(2, i+1));
                    j++;
                }
            }

            string WriteStr = "";
            for (int i = 0; i < 12; i++)
            {               
                if (myCheckBox[i].Checked)
                {
                    WriteStr = WriteStr+myTextBox[i].Text;                    
                }
            }
            for (int i = 0; i < WriteStr.Length/2;i++ )
            {
                mypiccdata[i] = Convert.ToByte(Convert.ToInt32(WriteStr.Substring(i * 2, 2), 16));
            }

            status = t5557_write(myctrlword, mypiccserial, oldpicckey, mypiccblockflag, mypiccdata);
            if (status == 0)
            {                
                seriaStr = "";
                for (int i = 0; i < 6; i++)
                {
                    seriaStr = seriaStr + mypiccserial[i].ToString("X2");
                }
                idr_beep(30);
                MessageBox.Show("卡号:" + seriaStr+"写卡成功!", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else { MessageErrInf(status); }
        }

 4. T5557 カードを ID カードおよび HID カードとして構成します。

private void button8_Click(object sender, EventArgs e)
        {
            byte status;     //存放返回值
            byte myctrlword = 0x00;  //控制字
            byte[] oldpicckey = new byte[4];  //密码
            byte[] newpicckey = new byte[4];  //新密码
            byte[] mypiccserial = new byte[6];  //卡序列号
            
            byte[] mypiccblockflag = new byte[2]; //指定读哪一块
            string PasswStr = textBox14.Text.Trim();
            string seriaStr = textBox15.Text.Trim();
            string newpassw = textBox20.Text.Trim();
            string newuidstr = textBox17.Text.Trim();

            if (checkBox1.Checked)  //本次操作需要密码验证
            {
                myctrlword = (byte)(myctrlword + NEEDKEY);
                try
                {
                    oldpicckey[0] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(0, 2), 16));
                    oldpicckey[1] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(2, 2), 16));
                    oldpicckey[2] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(4, 2), 16));
                    oldpicckey[3] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(6, 2), 16));
                }
                catch
                {
                    MessageBox.Show("认证密码输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox14.Select();
                    return;
                }
            }

            if (checkBox2.Checked)  //仅操作指定卡号的卡
            {
                try
                {
                    myctrlword = (byte)(myctrlword + NEEDSERIAL);
                    mypiccserial[0] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(0, 2), 16));
                    mypiccserial[1] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(2, 2), 16));
                    mypiccserial[2] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(4, 2), 16));
                    mypiccserial[3] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(6, 2), 16));
                    mypiccserial[4] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(8, 2), 16));
                    mypiccserial[5] = Convert.ToByte(Convert.ToInt32(seriaStr.Substring(10, 2), 16));
                }
                catch
                {
                    MessageBox.Show("卡号输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox15.Select();
                    return;
                }
            }

            if (checkBox11.Checked)  //修改卡片密码
            {
                try
                {
                    myctrlword = (byte)(myctrlword + KEYENABLE);
                    newpicckey[0] = Convert.ToByte(Convert.ToInt32(newpassw.Substring(0, 2), 16));
                    newpicckey[1] = Convert.ToByte(Convert.ToInt32(newpassw.Substring(2, 2), 16));
                    newpicckey[2] = Convert.ToByte(Convert.ToInt32(newpassw.Substring(4, 2), 16));
                    newpicckey[3] = Convert.ToByte(Convert.ToInt32(newpassw.Substring(6, 2), 16));
                }
                catch
                {
                    MessageBox.Show("密码输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox20.Select();
                    return;
                }
            }

            myctrlword = (byte)(myctrlword + RESETCARD); //操作后重启卡片,否则在制卡后,需要拿开卡片重放才能成功读ID卡

            if (radioButton3.Checked)
            {
                byte[] myuid = new byte[5];        //写入的新卡号
                try
                {
                    myuid[0] = Convert.ToByte(Convert.ToInt32(textBox16.Text.Substring(0, 2), 16));
                }
                catch
                {
                    MessageBox.Show("产家标识输入错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox16.Select();
                    return;
                }

                try
                {
                    myuid[1] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(0, 2), 16));
                    myuid[2] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(2, 2), 16));
                    myuid[3] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(4, 2), 16));
                    myuid[4] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(6, 2), 16));
                }
                catch
                {
                    MessageBox.Show("新卡号输入错误,请输入8位16进制数的卡号!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox17.Select();
                    return;
                }

                status = t5557_to4100(myctrlword, mypiccserial, oldpicckey, newpicckey, myuid);
                if (status == 0)
                {
                    idr_beep(50);
                    MessageBox.Show("卡号:" + System.Convert.ToString(myuid[1] * 256 * 256 * 256 + myuid[2] * 256 * 256 + myuid[3] * 256 + myuid[4]) + " 写卡成功变成ID卡!不能再用t5557的指令读写此卡,可重新设置配置块恢复t5557卡功能。", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else { MessageErrInf(status); }
            }
            else
            {
                byte[] myuid = new byte[7];        //写入的新卡号
                try
                {
                    myuid[0] = Convert.ToByte(Convert.ToInt32(textBox16.Text.Substring(0, 2), 16));
                }
                catch
                {
                    MessageBox.Show("HID卡号位数错误!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox16.Select();
                    return;
                }

                try
                {
                    myuid[1] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(0, 2), 16));
                    myuid[2] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(2, 2), 16));
                    myuid[3] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(4, 2), 16));
                    myuid[4] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(6, 2), 16));
                    myuid[5] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(8, 2), 16));
                    myuid[6] = Convert.ToByte(Convert.ToInt32(newuidstr.Substring(10, 2), 16));
                }
                catch
                {
                    MessageBox.Show("新卡号输入错误,请输入12位16进制数的卡号!", "示例提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox17.Select();
                    return;
                }

                status = t5557_tohid(myctrlword, mypiccserial, oldpicckey, newpicckey, myuid);
                if (status == 0)
                {
                    idr_beep(50);
                    MessageBox.Show("卡号:" + System.Convert.ToString(myuid[3] * 256 * 256 * 256 + myuid[4] * 256 * 256 + myuid[5] * 256 + myuid[6]) + " 写卡成功变成HID卡!不能再用t5557的指令读写此卡,可重新设置配置块恢复t5557卡功能。", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else { MessageErrInf(status); }
            }
        }

5. T5557 カードの初期化

private void button9_Click(object sender, EventArgs e)
        {             byte status; //戻り値を格納             byte[] oldpicckey = new byte[4]; //古いパスワード             byte[] newpicckey = new byte[4]; //新しいパスワードを有効にする             byte[] mypiccserial = new byte[6]; //カードのシリアル番号             byte[] mypiccdata = new byte[4]; //設定値             string PasswStr = textBox14.Text.Trim();             string NewPass = textBox21.Text.Trim ();             文字列 ConfStr = textBox18.Text.Trim();







            byte myctrlword = 0x00; //コントロールワード

            if (checkBox1.Checked) //今回の操作は必要密码验证
            {                 myctrlword = (byte)(myctrlword + NEEDKEY);                 {                     oldpicckey[0] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(0, 2), 16)); を                 試してください。                     oldpicckey[1] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(2, 2), 16));                     oldpicckey[2] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(4, 2), 16));                     oldpicckey[3] = Convert.ToByte(Convert.ToInt32(PasswStr.Substring(6, 2), 16));                 }                 キャッチ                 {










                    MessageBox.Show("認証パスワード入力エラー!", "プロンプト例", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox14.Select();
                    return;
                }
            }

            if (checkBox13.Checked) //卡片启用新密码
            {                 myctrlword = (byte)(myctrlword + KEYENABLE);                 {                     newpicckey[0] = Convert.ToByte(Convert.ToInt32(NewPass.Substring(0, 2), 16)); を                 試してください。                     newpicckey[1] = Convert.ToByte(Convert.ToInt32(NewPass.Substring(2, 2), 16));                     newpicckey[2] = Convert.ToByte(Convert.ToInt32(NewPass.Substring(4, 2), 16));                     newpicckey[3] = Convert.ToByte(Convert.ToInt32(NewPass.Substring(6, 2), 16));                 }                 キャッチ                 {










                    MessageBox.Show("認証パスワード入力エラー!", "プロンプト例", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    textBox21.Select();
                    return;
                }
            }


            {                 mypiccdata[0] = Convert.ToByte(Convert.ToInt32(ConfStr.Substring(0, 2), 16)); を            試してください。                 mypiccdata[1] = Convert.ToByte(Convert.ToInt32(ConfStr.Substring(2, 2), 16));                 mypiccdata[2] = Convert.ToByte(Convert.ToInt32(ConfStr.Substring(4, 2), 16));                 mypiccdata[3] = Convert.ToByte(Convert.ToInt32(ConfStr.Substring(6, 2), 16));             }             catch             {                 MessageBox.Show("配置值输入错误!", "例提案", MessageBoxButtons.OK, MessageBoxIcon.Error);                 textBox18.Select();                 戻る;             }










            status = t5557_init(myctrlword,mypiccserial,oldpicckey,mypiccdata,newpicckey);
            if (ステータス == 0)
            {                 string seriaStr = "";                 for (int i = 0; i < 6; i++)                 {                     seriaStr = seriaStr + mypiccserial[i].ToString("X2");                 idr_beep                 (30);                 MessageBox.Show("卡号:" + seriaStr + "配置成功!", "提案:", MessageBoxButtons.OK, MessageBoxIcon.Information);             }             else { MessageErrInf(ステータス); }         }









        private void GetConfigNUm()
        {             byte byte_i;             byte[] Configdata = 新しいバイト[4];

            if (radioButton1.Checked) //e5550 互換モード (X モード ビット: bit15) は 0
            {                 if (comboBox1.SelectedIndex == 0) //マスター キー                 {                     Configdata[0] = 0x00;                 }                 else { Configdata[0 ] = 0x60; }





                if (comboBox2.SelectedIndex < 9) //调制方式
                {                     byte_i = (byte)comboBox2.SelectedIndex;                 }                 else                 {                     if (comboBox2.SelectedIndex == 9)                     {                         byte_i = 0x10;                     }                     else { byte_i = 0x18; }                 }









                Configdata[1] = (byte)((2 * 4) | ((byte_i / 16) & 0x01)); //ボーレート
                Configdata[2] = (byte)((byte_i % 16) * 16);
                Configdata [ 2] = (byte)(Configdata[2] | ((comboBox3.SelectedIndex % 4) * 4)); //位相キーイング変調

                if (checkBox12.Checked) //AOR リクエスト応答モード
                {                     Configdata[2] = (byte)(Configdata[2] | 0x02);                 }

                Configdata[3] = (byte)((comboBox4.SelectedIndex % 8) * 32); //最大のブロック

                if (checkBox13.Checked) //暗号化機能を有効にする
                {                     if (Configdata[3] > (6 * 32)) //暗号化機能を有効にした後、最大ブロックは 7 にはなりません                     {                         Configdata[3] = 6 * 32 ;                     }                     Configdata[ 3] = (byte)(Configdata[3] | 0x10);                 }                 else { Configdata[2] = (byte)(Configdata[2] & 0xfd); } //AOR リクエスト応答モードをキャンセル






                if (checkBox14.Checked) //フレームターミネータは有効です
                {                     Configdata[3] = (byte)(Configdata[3] | 0x08);                 }

                if (checkBox19.Checked) //カードのリセット遅延は 67ms
                {                     Configdata[3] = (byte)(Configdata[3] | 0x01); }                 }             else             //拡張モード (X モード ビット: bit15) は 1             {                 構成データ [1] = 0x02;





                if (comboBox1.SelectedIndex == 0) // マスターキー
                {                     Configdata[0] = 0x60;                 }                 else { Configdata[0] = 0x90; }


                byte_i = (byte)((int)(btlnum.Value) % 64); //波特率BIT9-14
                Configdata[1] = (byte)(Configdata[1] | (byte_i * 4));

                if (comboBox2.SelectedIndex < 6) //调制方式
                {                     byte_i = (byte)comboBox2.SelectedIndex;                 }                 else                 {                     if (comboBox2.SelectedIndex == 7)                     {                         byte_i = 0x10;                     }                     else                     {                         if (comboBox2.SelectedIndex == 8)                         {                             byte_i = 0x18;                         }                         else { byte_i = 0x08; }                     }
















                }

                Configdata[1] = (byte)(Configdata[1] | ((byte_i/16) & 0x01)); //ボーレート
                Configdata[2] = (byte)((byte_i % 16) * 16);
                Configdata[ 2 ] = (byte)(Configdata[2] | ((comboBox3.SelectedIndex % 4) * 4)); //位相キーイング変調

                if (checkBox12.Checked) //AOR リクエスト応答モード
                {                     Configdata[2] = (byte)(Configdata[2] | 0x02);                 }

                if (checkBox23.Checked) //OTP
                {                     Configdata[2] = (byte)(Configdata[2] | 0x01);                 }

                Configdata[3] = (byte)((comboBox4.SelectedIndex % 8) * 32); //最大のブロック

                if (checkBox13.Checked) //暗号化機能を有効にする
                {                     if (Configdata[3] > (6 * 32)) //暗号化機能を有効にした後、最大ブロックは 7 にはなりません                     {                         Configdata[3] = 6 * 32 ;                     }                     Configdata[ 3] = (byte)(Configdata[3] | 0x10);                 }                 else { Configdata[2] = (byte)(Configdata[2] & 0xfd); } //AOR リクエスト応答モードをキャンセル






                if (checkBox22.Checked) //フレーム開始文字は有効です
                {                     Configdata[3] = (byte)(Configdata[3] | 0x08);                 }

                if (checkBox24.Checked) //クイック書き込み: 0 は 12TC、1 は 27TC
                {                     Configdata[3] = (byte)(Configdata[3] | 0x04);                 }

                if (checkBox25.Checked) // データ反転出力
                {                     Configdata[3] = (byte)(Configdata[3] | 0x02);                 }

                if (checkBox19.Checked) // カードリセット遅延 67ms
                {                     Configdata[3] = (byte)(Configdata[3] | 0x01);                 }             }


            textBox18.Text = Configdata[0].ToString("X2") + Configdata[1].ToString("X2") + Configdata[2].ToString("X2") + Configdata[3].ToString("X2") ); 
        }

おすすめ

転載: blog.csdn.net/zhangjin7422/article/details/128826303