Android Studio读写低频RFID T5557卡源码

本示例使用的发卡器:https://item.taobao.com/item.htm?id=675212889085&spm=a1z10.5-c.w4002-21818769070.13.21166f89nKgnJ7 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="3dp"tools:context=".T5557Activity"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="30dp"android:background="?attr/colorPrimary"app:navigationIcon="@drawable/baseline_arrow_back_ios_24"app:titleTextColor="@color/white"tools:ignore="MissingConstraints"tools:layout_editor_absoluteY="0dp"><TextViewandroid:id="@+id/TextViewlabelDispleft"android:layout_width="wrap_content"android:layout_height="match_parent"android:text="返回"android:textColor="@color/white"android:textSize="16sp"android:gravity="center"android:onClick="retmain" /><TextViewandroid:id="@+id/TextViewlabelDisp"android:layout_width="match_parent"android:layout_height="match_parent"android:text="T5557卡测试页  "android:textColor="@color/white"android:textSize="16sp"android:gravity="center_horizontal|right|center"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="@+id/TextViewlabelDispleft"app:layout_constraintTop_toTopOf="parent" /></androidx.appcompat.widget.Toolbar><TextViewandroid:id="@+id/sample_text"android:layout_width="fill_parent"android:layout_height="150dp"android:padding="3dp"android:text="操作结果"android:textSize="12sp"android:background="@drawable/shape4border"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintBottom_toBottomOf="parent"/><ScrollViewandroid:id="@+id/scrollViewIC"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_marginBottom="5dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/toolbar"app:layout_constraintBottom_toTopOf="@+id/sample_text"android:scrollbars="horizontal"><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="3dp" ><CheckBoxandroid:id="@+id/chkPwdT5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="false"android:text="带密码操作"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"/><EditTextandroid:id="@+id/editTextPwdT5557"android:layout_width="80dp"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef"android:gravity="center"android:inputType="textCapCharacters"android:maxLength="8"android:maxLines="1"android:text="00000000"android:textSize="14sp"app:layout_constraintBottom_toBottomOf="@+id/chkPwdT5557"app:layout_constraintLeft_toRightOf="@+id/chkPwdT5557"app:layout_constraintTop_toTopOf="@+id/chkPwdT5557"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="(十六进制)"android:textSize="12sp"android:layout_marginLeft="10dp"app:layout_constraintLeft_toRightOf="@+id/editTextPwdT5557"app:layout_constraintTop_toTopOf="@+id/chkPwdT5557"app:layout_constraintBottom_toBottomOf="@+id/chkPwdT5557"/><CheckBoxandroid:id="@+id/chkUidNeedT5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="false"android:text="仅操作指定卡号的卡"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkPwdT5557"/><EditTextandroid:id="@+id/editTextUidT5557"android:layout_width="110dp"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef"android:gravity="center"android:inputType="textCapCharacters"android:maxLength="12"android:maxLines="1"android:text="000000000000"android:textSize="14sp"app:layout_constraintBottom_toBottomOf="@+id/chkUidNeedT5557"app:layout_constraintLeft_toRightOf="@+id/chkUidNeedT5557"app:layout_constraintTop_toTopOf="@+id/chkUidNeedT5557" /><TextViewandroid:id="@+id/TextViewlabel0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="返回数据:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintBottom_toTopOf="@+id/TextViewRetDataT5557"/><TextViewandroid:id="@+id/TextViewRetDataT5557"android:layout_width="fill_parent"android:layout_height="wrap_content"android:padding="3dp"android:text=""android:textSize="12sp"android:background="@drawable/shape4border"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/btnRetDataClrT5557"/><Buttonandroid:id="@+id/btnRetDataClrT5557"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="textclear5557"android:text="清空数据"android:textSize="11sp"app:layout_constraintTop_toBottomOf="@+id/editTextUidT5557"app:layout_constraintRight_toRightOf="parent" /><Buttonandroid:id="@+id/btnPwdChangeT5557"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="changepwd5557"android:text="修改卡密码"android:textSize="11sp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/TextViewRetDataT5557" /><TextViewandroid:id="@+id/TextViewlabel1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="新密码:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="@+id/btnPwdChangeT5557"app:layout_constraintBottom_toBottomOf="@+id/btnPwdChangeT5557"/><EditTextandroid:id="@+id/editTextPwdNewT5557"android:layout_width="80dp"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef"android:gravity="center"android:inputType="textCapCharacters"android:maxLength="8"android:maxLines="1"android:text="00000000"android:textSize="14sp"app:layout_constraintBottom_toBottomOf="@+id/btnPwdChangeT5557"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel1"app:layout_constraintTop_toTopOf="@+id/btnPwdChangeT5557" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="(十六进制)"android:textSize="12sp"android:layout_marginLeft="10dp"app:layout_constraintLeft_toRightOf="@+id/editTextPwdNewT5557"app:layout_constraintTop_toTopOf="@+id/editTextPwdNewT5557"app:layout_constraintBottom_toBottomOf="@+id/editTextPwdNewT5557"/><TextViewandroid:id="@+id/TextViewlabel2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="第0页:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="@+id/chkB0T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB0T5557"/><CheckBoxandroid:id="@+id/chkB0T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="11sp"android:checked="false"android:text="块0"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel2"app:layout_constraintTop_toBottomOf="@+id/btnPwdChangeT5557"/><CheckBoxandroid:id="@+id/chkB1T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="11sp"android:checked="false"android:text="块1"app:layout_constraintLeft_toRightOf="@+id/chkB0T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB0T5557"/><CheckBoxandroid:id="@+id/chkB2T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="11sp"android:checked="false"android:text="块2"app:layout_constraintLeft_toRightOf="@+id/chkB1T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB0T5557"/><CheckBoxandroid:id="@+id/chkB3T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="11sp"android:checked="false"android:text="块3"app:layout_constraintLeft_toRightOf="@+id/chkB2T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB0T5557"/><CheckBoxandroid:id="@+id/chkB4T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="false"android:text="块4"app:layout_constraintLeft_toRightOf="@+id/chkB3T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB0T5557"/><CheckBoxandroid:id="@+id/chkB5T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="false"android:text="块5"app:layout_constraintLeft_toRightOf="@+id/chkB4T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB0T5557"/><CheckBoxandroid:id="@+id/chkB6T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块6"android:textSize="11sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkB0T5557" /><CheckBoxandroid:id="@+id/chkB7T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="false"android:text="块7"app:layout_constraintLeft_toRightOf="@+id/chkB6T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB6T5557"/><TextViewandroid:id="@+id/TextViewlabel3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="第1页:"android:textSize="12sp"android:layout_marginLeft="20dp"app:layout_constraintLeft_toRightOf="@+id/chkB7T5557"app:layout_constraintTop_toTopOf="@+id/chkB7T5557"app:layout_constraintBottom_toBottomOf="@+id/chkB7T5557"/><CheckBoxandroid:id="@+id/chkB11T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:checked="false"android:text="块1"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB7T5557"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel3" /><CheckBoxandroid:id="@+id/chkB12T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块2"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB7T5557"app:layout_constraintLeft_toRightOf="@+id/chkB11T5557" /><CheckBoxandroid:id="@+id/chkB13T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块3"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB7T5557"app:layout_constraintLeft_toRightOf="@+id/chkB12T5557" /><CheckBoxandroid:id="@+id/chkB14T5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块4"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB7T5557"app:layout_constraintLeft_toRightOf="@+id/chkB13T5557" /><Buttonandroid:id="@+id/btnReadT5557"android:layout_width="wrap_content"android:layout_height="40dp"android:layout_marginRight="20dp"android:onClick="read5557"android:text="读卡"android:textSize="11sp"app:layout_constraintRight_toLeftOf="@+id/btnWriteT5557"app:layout_constraintTop_toBottomOf="@+id/chkB7T5557" /><Buttonandroid:id="@+id/btnWriteT5557"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="write5557"android:text="写卡"android:textSize="11sp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkB7T5557" /><TextViewandroid:id="@+id/TextViewlabel4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="写入数据:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/btnReadT5557"app:layout_constraintLeft_toLeftOf="parent" /><EditTextandroid:id="@+id/editTextDataT5557"android:layout_width="0dp"android:layout_height="40dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef"android:gravity="left"android:inputType="textCapCharacters"android:maxLength="128"android:text="11111111"android:padding="3dp"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="@+id/TextViewRetDataT5557"app:layout_constraintRight_toRightOf="@+id/TextViewRetDataT5557"app:layout_constraintTop_toBottomOf="@+id/btnWriteT5557" /><TextViewandroid:id="@+id/TextViewlabel5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="配置区位于第0页第0块:\ne5550兼容模式,主控键值默认(不等于6及不等于9),波特率RF/32,调制模式为\n曼彻斯特码,相位键控RF/2,自动发送最大块为1,卡片复位无延时\n如需改动以上值请联系我们 !"android:textSize="12sp"app:layout_constraintTop_toBottomOf="@+id/editTextDataT5557"app:layout_constraintLeft_toLeftOf="parent" /><CheckBoxandroid:id="@+id/chkAOR"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="false"android:text="AOR请求应答模式"android:onClick="updateset5557"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/TextViewlabel5"/><CheckBoxandroid:id="@+id/chkFrameEnd"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="true"android:text="帧终结符"android:onClick="updateset5557"app:layout_constraintLeft_toRightOf="@+id/chkAOR"app:layout_constraintBottom_toBottomOf="@+id/chkAOR"/><CheckBoxandroid:id="@+id/chkPwdSetT5557"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:textSize="12sp"android:checked="false"android:text="启用密码读写功能,并设密码为"android:onClick="updateset5557"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkAOR"/><EditTextandroid:id="@+id/editTextPwdSetT5557"android:layout_width="80dp"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef"android:gravity="center"android:inputType="textCapCharacters"android:maxLength="8"android:maxLines="1"android:text="00000000"android:textSize="14sp"app:layout_constraintBottom_toBottomOf="@+id/chkPwdSetT5557"app:layout_constraintLeft_toRightOf="@+id/chkPwdSetT5557"app:layout_constraintTop_toTopOf="@+id/chkPwdSetT5557"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="(十六进制)"android:textSize="12sp"android:layout_marginLeft="10dp"app:layout_constraintLeft_toRightOf="@+id/editTextPwdSetT5557"app:layout_constraintTop_toTopOf="@+id/chkPwdSetT5557"app:layout_constraintBottom_toBottomOf="@+id/chkPwdSetT5557"/><TextViewandroid:id="@+id/TextViewlabel22"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="配置值:"android:textSize="12sp"app:layout_constraintTop_toTopOf="@+id/editTextConfigWordT5557"app:layout_constraintBottom_toBottomOf="@+id/editTextConfigWordT5557"app:layout_constraintLeft_toLeftOf="parent" /><EditTextandroid:id="@+id/editTextConfigWordT5557"android:layout_width="68dp"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:background="@drawable/shape4border"android:digits="0123456789ABCDEFabcdef"android:gravity="left"android:inputType="textCapCharacters"android:maxLength="8"android:text="00088028"android:paddingLeft="3dp"android:textSize="12sp"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel22"app:layout_constraintTop_toBottomOf="@+id/chkPwdSetT5557"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="(十六进制)"android:textSize="12sp"android:layout_marginLeft="10dp"app:layout_constraintLeft_toRightOf="@+id/editTextConfigWordT5557"app:layout_constraintTop_toTopOf="@+id/editTextConfigWordT5557"app:layout_constraintBottom_toBottomOf="@+id/editTextConfigWordT5557"/><Buttonandroid:id="@+id/btnDefalutT5557"android:layout_width="wrap_content"android:layout_height="40dp"android:layout_marginRight="20dp"android:onClick="default5557"android:text="← 默认值"android:textSize="11sp"app:layout_constraintRight_toLeftOf="@+id/btnInitT5557"app:layout_constraintBottom_toBottomOf="@+id/btnInitT5557" /><Buttonandroid:id="@+id/btnInitT5557"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="init5557"android:text="设定配置"android:textSize="12sp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/editTextConfigWordT5557"/><Buttonandroid:id="@+id/btnT5557to4100"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="t5557to4100"android:text="t5557卡配置成ID卡"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/btnInitT5557"/><TextViewandroid:id="@+id/TextViewlabel23"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="厂商编码"android:textSize="12sp"app:layout_constraintTop_toTopOf="@+id/btnT5557to4100"app:layout_constraintBottom_toBottomOf="@+id/btnT5557to4100"app:layout_constraintLeft_toRightOf="@+id/btnT5557to4100" /></androidx.constraintlayout.widget.ConstraintLayout></ScrollView></androidx.constraintlayout.widget.ConstraintLayout>
package com.usbreadertest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;import com.reader.ouridr;
import com.reader.ourmifare;
public class T5557Activity extends AppCompatActivity {private TextView tv;private byte NEEDSERIAL = 0x01;   //需要只对指定系列号的卡操作private byte NEEDKEY = 0x02;      //需要用密码认证private byte LOCKBIT = 0x04;      //锁定配置块或数据块,仅对   t5557_init,t5557_write ,t5557_changekey函数有效private byte KEYENABLE = 0x08;    //启用本卡的密码功能private byte RESETCARD = 0x10;    //操作成功后重启卡片@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_t5557);androidx.appcompat.widget.Toolbar toolbar=findViewById(R.id.toolbar);setSupportActionBar(toolbar);tv = findViewById(R.id.sample_text);tv.setText("操作结果");}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {if(item.getItemId()==android.R.id.home){finish();return true;}return super.onOptionsItemSelected(item);}public void retmain(View view){finish();}public void textclear5557(View view){TextView tvls;tvls = findViewById(R.id.TextViewRetDataT5557);tvls.setText("");}public void default5557(View view){EditText etls;CheckBox cbls;etls = findViewById(R.id.editTextConfigWordT5557);etls.setText("00088028");cbls = findViewById(R.id.chkAOR);//AOR请求应答模式cbls.setChecked(false);cbls = findViewById(R.id.chkFrameEnd);//帧终结符cbls.setChecked(true);cbls = findViewById(R.id.chkPwdSetT5557);//启用密码读写功能,并设密码为cbls.setChecked(false);}public void updateset5557(View view){CheckBox cbls;CheckBox cbAOR;CheckBox cbPWD;EditText etls;byte[] Configdata = new byte[4];//配置值etls = findViewById(R.id.editTextConfigWordT5557);String strls = etls.getText().toString().trim();if(strls.length() < 8){strls = "00088028";Configdata[0] = 0x00;Configdata[1] = 0x08;Configdata[2] = (byte)0x80;Configdata[3] = 0x28;}else {for (byte i = 0; i < 4; i++) {Configdata[i] = (byte)Integer.parseInt(strls.substring(i * 2, i * 2 + 2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}}cbAOR = findViewById(R.id.chkAOR);//AOR请求应答模式cbPWD = findViewById(R.id.chkPwdSetT5557);//启用密码读写功能,并设密码为if(cbAOR.isChecked()) {if(!cbPWD.isChecked()) {//密码没启用,AOR无效cbAOR.setChecked(false);Configdata[2] &= 0xfd;tv.setText("密码没启用,AOR无效");}else {Configdata[2] |= 0x02;}}else {Configdata[2] &= 0xfd;}cbls = findViewById(R.id.chkFrameEnd);//帧终结符if(cbls.isChecked()) {Configdata[3] |= 0x08;}else {Configdata[3] &= 0xf7;}if(cbPWD.isChecked()) {if ((Configdata[3] & 0xe0) > (6 * 32)) {//启用密码功能后,最大块不能为7Configdata[3] &= 0x1f;Configdata[3] |=(6 * 32);}Configdata[3] |= 0x10;//启用密码功能}else{Configdata[3] &= 0xef;//取消密码功能Configdata[2] &= 0xfd;cbAOR.setChecked(false);}etls.setText(String.format("%02X%02X%02X%02X",Configdata[0],Configdata[1],Configdata[2],Configdata[3]));}public void changepwd5557(View view){byte i;byte j;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//密码byte[] mypiccserial = new byte[6];//卡序列号byte[] newpicckey = new byte[4];//指定写哪一块myctrlword = 0; //NEEDSERIAL:需要只对指定系列号的卡操作,NEEDKEY:需要用密码认证,LOCKBIT:锁定块,KEYENABLE:启用本卡的密码功能String strls;CheckBox cbls;EditText etls;cbls = findViewById(R.id.chkPwdT5557);if(cbls.isChecked()) {//本次操作需要密码验证etls = findViewById(R.id.editTextPwdT5557);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("旧密码长度不足8位");return;}for (i = 0; i < 4; i++) {oldpicckey[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDKEY;}cbls = findViewById(R.id.chkUidNeedT5557);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidT5557);strls = etls.getText().toString().trim();if(strls.length() < 12){tv.setText("卡号长度不足12位");return;}for (i = 0; i < 6; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}etls = findViewById(R.id.editTextPwdNewT5557);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("新密码长度不足8位!");return;}for (i = 0; i < 4; i++) {newpicckey[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}status = ouridr.t5557changekey(myctrlword,mypiccserial,oldpicckey,newpicckey);if(status == 0){strls = "卡号[";strls += String.format("%02X%02X%02X%02X%02X%02X",mypiccserial[0],mypiccserial[1],mypiccserial[2],mypiccserial[3],mypiccserial[4],mypiccserial[5]);strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataT5557);tvls.setText(strls);strls = "更改T5557卡密码成功";ouridr.beep(38);}else {strls=GetErrInf(status);}tv.setText(strls);}public void read5557(View view){byte i;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//密码byte[] mypiccserial = new byte[6];//卡序列号byte[] mypiccdata = new byte[64];//读卡数据缓冲:卡无线转输分频比、卡内容长度(字节数),及最多返回12块的数据byte[] mypiccblockflag = new byte[2];//指定读哪一块myctrlword = 0; //NEEDSERIAL:需要只对指定系列号的卡操作,NEEDKEY:需要用密码认证,LOCKBIT:锁定块,KEYENABLE:启用本卡的密码功能String strls;CheckBox cbls;EditText etls;cbls = findViewById(R.id.chkPwdT5557);if(cbls.isChecked()) {//本次操作需要密码验证etls = findViewById(R.id.editTextPwdT5557);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("密码长度不足8位");return;}for (i = 0; i < 4; i++) {oldpicckey[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDKEY;}cbls = findViewById(R.id.chkUidNeedT5557);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidT5557);strls = etls.getText().toString().trim();if(strls.length() < 12){tv.setText("卡号长度不足12位");return;}for (i = 0; i < 6; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}//操作块标志//第0页的块mypiccblockflag[0] = 0;cbls = findViewById(R.id.chkB0T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 1;}cbls = findViewById(R.id.chkB1T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 2;}cbls = findViewById(R.id.chkB2T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 4;}cbls = findViewById(R.id.chkB3T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 8;}cbls = findViewById(R.id.chkB4T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 16;}cbls = findViewById(R.id.chkB5T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 32;}cbls = findViewById(R.id.chkB6T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 64;}cbls = findViewById(R.id.chkB7T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 128;}//第1页mypiccblockflag[1] = 0;cbls = findViewById(R.id.chkB11T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 2;}cbls = findViewById(R.id.chkB12T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 4;}cbls = findViewById(R.id.chkB13T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 8;}cbls = findViewById(R.id.chkB14T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 16;}status = ouridr.t5557read(myctrlword,mypiccserial,oldpicckey,mypiccblockflag,mypiccdata);if(status == 0){strls = "卡无线转输分频比[" + Integer.toString(mypiccdata[0]) + "],卡号[";strls += String.format("%02X%02X%02X%02X%02X%02X",mypiccserial[0],mypiccserial[1],mypiccserial[2],mypiccserial[3],mypiccserial[4],mypiccserial[5]);strls += "],卡数据[";for (i = 0; i < mypiccdata[1]; i++) {strls += String.format("%02X",mypiccdata[i+2]);}strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataT5557);tvls.setText(strls);strls = "读T5557卡成功";ouridr.beep(38);}else {strls=GetErrInf(status);}tv.setText(strls);}public void write5557(View view){byte i;byte j;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//密码byte[] mypiccserial = new byte[6];//卡序列号byte[] mypiccdata = new byte[64];//写入数据缓冲:最多12块的数据byte[] mypiccblockflag = new byte[2];//指定写哪一块myctrlword = 0; //NEEDSERIAL:需要只对指定系列号的卡操作,NEEDKEY:需要用密码认证,LOCKBIT:锁定块,KEYENABLE:启用本卡的密码功能String strls;CheckBox cbls;EditText etls;cbls = findViewById(R.id.chkPwdT5557);if(cbls.isChecked()) {//本次操作需要密码验证etls = findViewById(R.id.editTextPwdT5557);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("密码长度不足8位");return;}for (i = 0; i < 4; i++) {oldpicckey[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDKEY;}cbls = findViewById(R.id.chkUidNeedT5557);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidT5557);strls = etls.getText().toString().trim();if(strls.length() < 12){tv.setText("卡号长度不足12位");return;}for (i = 0; i < 6; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}//操作块标志j = 0;//第0页的块mypiccblockflag[0] = 0;cbls = findViewById(R.id.chkB0T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 1;j++;}cbls = findViewById(R.id.chkB1T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 2;j++;}cbls = findViewById(R.id.chkB2T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 4;j++;}cbls = findViewById(R.id.chkB3T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 8;j++;}cbls = findViewById(R.id.chkB4T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 16;j++;}cbls = findViewById(R.id.chkB5T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 32;j++;}cbls = findViewById(R.id.chkB6T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 64;j++;}cbls = findViewById(R.id.chkB7T5557);if(cbls.isChecked()) {mypiccblockflag[0] += 128;j++;}//第1页mypiccblockflag[1] = 0;cbls = findViewById(R.id.chkB11T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 2;j++;}cbls = findViewById(R.id.chkB12T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 4;j++;}cbls = findViewById(R.id.chkB13T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 8;j++;}cbls = findViewById(R.id.chkB14T5557);if(cbls.isChecked()) {mypiccblockflag[1] += 16;j++;}//写卡数据准备if(j == 0){tv.setText("请先选择需要写入的块");return;}etls = findViewById(R.id.editTextDataT5557);strls = etls.getText().toString().trim();if(strls.length() < (j*8)){tv.setText("写入数据长度不足,请补足数据!");return;}for (i = 0; i < (j*4); i++) {mypiccdata[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}status = ouridr.t5557write(myctrlword,mypiccserial,oldpicckey,mypiccblockflag,mypiccdata);if(status == 0) {strls = "卡号[";strls += String.format("%02X%02X%02X%02X%02X%02X", mypiccserial[0], mypiccserial[1], mypiccserial[2], mypiccserial[3], mypiccserial[4], mypiccserial[5]);strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataT5557);tvls.setText(strls);strls = "写T5557卡成功";ouridr.beep(38);}else {strls=GetErrInf(status);}tv.setText(strls);}public void init5557(View view){byte i;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//密码byte[] mypiccserial = new byte[6];//卡序列号byte[] mypiccdata = new byte[4];//写入数据缓冲byte[] newpicckey = new byte[4];//指定写哪一块myctrlword = 0; //NEEDSERIAL:需要只对指定系列号的卡操作,NEEDKEY:需要用密码认证,LOCKBIT:锁定块,KEYENABLE:启用本卡的密码功能String strls;CheckBox cbls;EditText etls;cbls = findViewById(R.id.chkPwdT5557);if(cbls.isChecked()) {//本次操作需要密码验证etls = findViewById(R.id.editTextPwdT5557);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("密码长度不足8位");return;}for (i = 0; i < 4; i++) {oldpicckey[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDKEY;}cbls = findViewById(R.id.chkPwdSetT5557);if(cbls.isChecked()) {//启用密码读写功能etls = findViewById(R.id.editTextPwdSetT5557);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("新密码长度不足8位");return;}for (i = 0; i < 4; i++) {newpicckey[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.KEYENABLE;}else {newpicckey[0] = 0x00;newpicckey[1] = 0x00;newpicckey[2] = 0x00;newpicckey[3] = 0x00;}cbls = findViewById(R.id.chkUidNeedT5557);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidT5557);strls = etls.getText().toString().trim();if(strls.length() < 12){tv.setText("卡号长度不足12位");return;}for (i = 0; i < 6; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}//配置值:etls = findViewById(R.id.editTextConfigWordT5557);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("配置值输入长度不足8位");return;}for (i = 0; i < 4; i++) {mypiccdata[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}status = ouridr.t5557init(myctrlword,mypiccserial,oldpicckey,mypiccdata,newpicckey);if(status == 0) {strls = "卡号[";strls += String.format("%02X%02X%02X%02X%02X%02X",mypiccserial[0],mypiccserial[1],mypiccserial[2],mypiccserial[3],mypiccserial[4],mypiccserial[5]);strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataT5557);tvls.setText(strls);strls = "配置T5557卡成功";ouridr.beep(38);}else {strls=GetErrInf(status);}tv.setText(strls);}public void t5557to4100(View view){byte[] myuidbuf=new byte[7];byte[] oldpicckey=new byte[4];byte[] newpicckey=new byte[4];byte[] mypiccserial=new byte[6];byte myctrlword=RESETCARD;myuidbuf[0]=47;myuidbuf[1]=1;myuidbuf[2]=2;myuidbuf[3]=3;myuidbuf[4]=4;byte status=ouridr.t5557to4100(myctrlword,mypiccserial,oldpicckey,newpicckey,myuidbuf);if (status==0){ouridr.beep(38);tv.setText("T5557卡配置成ID卡成功!");}else{tv.setText("错误代码:"+Integer.toString(status));}}public String GetErrInf(byte errcode) {String dispstr="";switch(errcode){case 1:dispstr="错误代码:1,写入配置的值不正确,配置区或密码区可能已被锁定,请重新写入!";break;case 2:dispstr="错误代码:2,本卡尚未开启密码功能,函数myctrlword中无需加入NEEDKEY!";break;case 3:dispstr="错误代码:3,需要指定密码,函数myctrlword要加入NEEDKEY!";break;case 5:dispstr="错误代码:5,密码错误!";break;case 8:dispstr="错误代码:8,卡不在感应区 或 密码不正确,请重新拿开卡后再放到感应区!";break;case 23:dispstr="错误代码:23,发卡器未连接!";break;default:dispstr="未知错误,错误代码:"+Integer.toString(errcode);break;}return dispstr;}}

源码下载:AndroidstudioRFIDNFC读写源码资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/243103.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

api网关-kong

选型 api网关相关功能 服务的路由 动态路由负载均衡 服务发现 限流 熔断、降级 流量管理 黑白名单反爬策略 控制台&#xff1a;通过清晰的UI界面对网关集群进行各项配置。 集群管理&#xff1a;Goku网关节点是无状态的&#xff0c;配置信息自动同步&#xff0c;支持节点水…

Oracle1 数据库管理

Oracle的安装 一、基础表的创建 1.1 切换到scott用户 用sys 账户 登录 解锁scott账户 alter user scott account unlock;conn scott/tiger;发现并不存在scott账户&#xff0c;自己创建一个&#xff1f; 查找资料后发现&#xff0c;scott用户的脚本需要自己执行一下 C:\ap…

VsCode + CMake构建项目 C/C++连接Mysql数据库 | 数据库增删改查C++封装 | 信息管理系统通用代码 ---- 课程笔记

这个是B站Up主&#xff1a;程序员程子青的视频 C封装Mysql增删改查操作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1m24y1a79o/?p6&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3安装mysql:mysql 下载和安装和修改MYSQL8.0 数据库存储…

开源网安推出“国产替代续航惠企计划”,实现“两不三保”目标

​随着全球安全威胁态势越发严峻&#xff0c;国内网络安全监管趋严&#xff0c;Adobe、Tableau、Salesforce、Nutanix、Citrix、checkmarx等外企陆续裁员离华&#xff0c;国产替代从战略层的备选项&#xff0c;也将逐步变为需要快速落地的必选项。 为了确保用户能高效应对外企离…

网络安全(初版,以后会不断更新)

1.网络安全常识及术语 资产 任何对组织业务具有价值的信息资产&#xff0c;包括计算机硬件、通信设施、IT 环境、数据库、软件、文档 资料、信息服务和人员等。 漏洞 上边提到的“永恒之蓝”就是windows系统的漏洞 漏洞又被称为脆弱性或弱点&#xff08;Weakness&#xff09;&a…

记录昆仑通态:HMI

目录 基本图元应用&#xff1a; 标签构件应用&#xff1a;​编辑 位图构件应用&#xff1a;​编辑 输入框构件应用&#xff1a;​编辑 流动块构件应用&#xff1a;​编辑 百分比填充构件应用&#xff1a;​编辑 标准按钮构件应用&#xff1a;​编辑 动画按钮构件应用&…

红日靶场2打点记录

因为之前成功用冰蝎免杀360&#xff0c;把权限反弹到了MSF上&#xff0c;然后MSF把权限反弹到CS上 所以这次咱们走捷径直接通过反序列化漏洞连接&#xff08;就是关掉360&#xff09;因为权限弹来弹去感觉好麻烦 提示 大家如果想要免杀360千万别学我&#xff0c;我是之前免杀3…

解开缺省参数与函数重载的衣裳

解开缺省参数与函数重载的衣裳 代码是如何由编译器变为可执行文件&#xff1f;预处理 ->编译->汇编->链接预处理编译汇编链接 语法了解缺省参数语法实践语法探究函数重载语法实践语法探究结语 本期和大家一起探究C中的缺省函数与重载函数的语法说明与汇编过程代码是如…

【SpringBoot技术专题】「开发实战系列」Undertow web容器的入门实战及调优方案精讲

Undertow web容器的入门实战及调优方案精讲 Undertow web容器Undertow 介绍官网API给出一句话概述Undertow&#xff1a;官网API总结特点&#xff1a;Lightweight&#xff08;轻量级&#xff09;HTTP Upgrade Support&#xff08;支持http升级&#xff09;、HTTP/2 Support支持H…

鸿蒙开发-UI-布局-弹性布局

地方 鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 文章目录 前言 一、基本概念 二、布局方向 1、主轴为水平方向 2、主轴为垂直方向 三、布局换行 四、对齐方式 1、主轴对齐方式 2、交叉轴对齐方式 2.1、容器组件设置交叉轴对齐 2.2、子组件设置交叉…

EtherNet/IP开发:C++搭建基础模块,EtherNet/IP源代码

这里是CIP资料的协议层级图&#xff0c;讲解协议构造。 ODVA&#xff08;www.ODVA.org&#xff09;成立于1995年&#xff0c;是一个全球性协会&#xff0c;其成员包括世界领先的自动化公司。结合其成员的支持&#xff0c;ODVA的使命是在工业自动化中推进开放、可互操作的信息和…

python实现图片式PDF转可搜索word文档[OCR](已打包exe文件)

目录 1、介绍 1.1、痛点 1.2、程序介绍 2、安装方式 2.1、&#x1f53a;必要环节 2.2、脚本安装 2.2.1、不太推荐的方式 2.2.2、节约内存的方式 2.3、⭐完整版安装 3、使用 3.1、最终文件目录 3.2、主程序 3.2.1、绝对路径 3.2.2、是否为书籍 3.2.3、⭐截取区域 …

二维码地址门牌管理系统:智能便捷的社区管理

文章目录 前言一、全面智能化管理功能二、智能门牌与便捷服务三、提升管理效率与安全四、系统带来的活力与便利五、期待未来的创新与突破 前言 随着科技的飞速发展&#xff0c;社区管理正在迎来前所未有的变革。二维码地址门牌管理系统作为一款创新工具&#xff0c;为居民和管…

【优化技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路

针对Java对象压缩及序列化技术的探索之路 序列化和反序列化为何需要有序列化呢&#xff1f;Java实现序列化的方式二进制格式 指定语言层级二进制格式 跨语言层级JSON 格式化类JSON格式化&#xff1a;XML文件格式化 序列化的分类在速度的对比上一般有如下规律&#xff1a;Java…

【音视频】基于ffmpeg对视频的切割/合成/推流

背景 基于FFmpeg对视频进行切割、合成和推流的价值和意义在于它提供了一种高效、灵活且免费的方式来实现视频内容的定制、管理和分发。通过FFmpeg&#xff0c;用户可以轻松地剪辑视频片段&#xff0c;根据需要去除不必要的部分或提取特定时间段的内容&#xff0c;从而优化观看…

一遍文章教你快速入门vue3+ts+Echarts

之前做得项目有vue2和vue3,使用echarts的方式大同小异&#xff0c;这篇文章就先介绍vue3的用法 下载echart 可以看官方文档&#xff0c;其实说得很清楚echart官方 npm install echarts --save按需引入echart 由于我得项目中使用到得echart不多&#xff0c;所以这里我引入几个…

当 OpenTelemetry 遇上阿里云 Prometheus

作者&#xff1a;逸陵 背景 在云原生可观测蓬勃发展的当下&#xff0c;想必大家对 OpenTelemetry & Prometheus 并不是太陌生。OpenTelemetry 是 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;旗下的开源项目&#xff0c;它的目标是在云原生时代成为应…

Vue 实例创建流程

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

怎么把文件资料做成二维码?扫码下发文件更方便

想要快速的将一份或者多分资料下发给其他人时&#xff0c;如果群发之外有什么其他的方法可以使用呢&#xff1f;现在大家一般都是在手机上获取内容&#xff0c;如果通过群发的方式还需要接收下载&#xff0c;占用自己手机一定的空间容量&#xff0c;而且会有有效期的限制。那么…

4.servera修改主机名,配置网络,以及在cmd中远程登录servera的操作

1.先关闭这两节省资源 2.对于新主机修改主机名&#xff0c;配置网络 一、配置网络 1.推荐图形化界面nmtui 修改完成后测试 在redhat ping一下 在redhat远程登录severa 2、使用nmcli来修改网络配置 2.1、配置要求&#xff1a;主机名&#xff1a; node1.domain250.exam…