安卓Android studio读写EM4305卡源码

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

<?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=".EM4305Activity"><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="EM4305卡测试页  "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/chkPwdEM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="带密码操作"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent" /><EditTextandroid:id="@+id/editTextPwdEM4305"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/chkPwdEM4305"app:layout_constraintLeft_toRightOf="@+id/chkPwdEM4305"app:layout_constraintTop_toTopOf="@+id/chkPwdEM4305"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="(十六进制)"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/chkPwdEM4305"app:layout_constraintLeft_toRightOf="@+id/editTextPwdEM4305"app:layout_constraintTop_toTopOf="@+id/chkPwdEM4305" /><CheckBoxandroid:id="@+id/chkUidNeedEM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="仅操作指定卡号的卡"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkPwdEM4305" /><EditTextandroid:id="@+id/editTextUidEM4305"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/chkUidNeedEM4305"app:layout_constraintLeft_toRightOf="@+id/chkUidNeedEM4305"app:layout_constraintTop_toTopOf="@+id/chkUidNeedEM4305"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="(十六进制)"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/chkUidNeedEM4305"app:layout_constraintLeft_toRightOf="@+id/editTextUidEM4305"app:layout_constraintTop_toTopOf="@+id/chkUidNeedEM4305" /><TextViewandroid:id="@+id/TextViewlabel6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="返回数据:"android:textSize="12sp"app:layout_constraintBottom_toTopOf="@+id/TextViewRetDataEM4305"app:layout_constraintLeft_toLeftOf="parent" /><TextViewandroid:id="@+id/TextViewRetDataEM4305"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@drawable/shape4border"android:padding="3dp"android:text=""android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/btnRetDataClrEM4305"/><Buttonandroid:id="@+id/btnRetDataClrEM4305"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="textclear4305"android:text="清空数据"android:textSize="11sp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/editTextUidEM4305" /><Buttonandroid:id="@+id/btnPwdChangeEM4305"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="changepwd4305"android:text="修改卡密码"android:textSize="11sp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/TextViewRetDataEM4305" /><TextViewandroid:id="@+id/TextViewlabel7"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="新密码:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/btnPwdChangeEM4305"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="@+id/btnPwdChangeEM4305"/><EditTextandroid:id="@+id/editTextPwdNewEM4305"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/btnPwdChangeEM4305"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel7"app:layout_constraintTop_toTopOf="@+id/btnPwdChangeEM4305" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="(十六进制)"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/editTextPwdNewEM4305"app:layout_constraintLeft_toRightOf="@+id/editTextPwdNewEM4305"app:layout_constraintTop_toTopOf="@+id/editTextPwdNewEM4305" /><CheckBoxandroid:id="@+id/chkB0EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块0"android:textSize="11sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/btnPwdChangeEM4305" /><CheckBoxandroid:id="@+id/chkB1EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块1(UID)"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB0EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB0EM4305" /><CheckBoxandroid:id="@+id/chkB3EM4305"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/chkB0EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB1EM4305" /><CheckBoxandroid:id="@+id/chkB4EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块4(配置)"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/chkB0EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB3EM4305" /><CheckBoxandroid:id="@+id/chkB5EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块5"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/chkB0EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB4EM4305" /><CheckBoxandroid:id="@+id/chkB6EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块6"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB0EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB5EM4305" /><CheckBoxandroid:id="@+id/chkB7EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块7"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkB0EM4305" /><CheckBoxandroid:id="@+id/chkB8EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块8"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB7EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB7EM4305" /><CheckBoxandroid:id="@+id/chkB9EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块9"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB8EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB8EM4305" /><CheckBoxandroid:id="@+id/chkB10EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块10"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB8EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB9EM4305" /><CheckBoxandroid:id="@+id/chkB11EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块11"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB8EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB10EM4305" /><CheckBoxandroid:id="@+id/chkB12EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块12"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB8EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB11EM4305" /><CheckBoxandroid:id="@+id/chkB13EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块13"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB8EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB12EM4305" /><CheckBoxandroid:id="@+id/chkB14EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块14"android:textSize="11sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkB8EM4305" /><CheckBoxandroid:id="@+id/chkB15EM4305"android:layout_width="wrap_content"android:layout_height="30dp"android:layout_marginLeft="2dp"android:checked="false"android:text="块15"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/chkB14EM4305"app:layout_constraintLeft_toRightOf="@+id/chkB14EM4305" /><TextViewandroid:id="@+id/TextViewlabel10"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="写入数据:"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/chkB14EM4305" /><EditTextandroid:id="@+id/editTextDataEM4305"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:padding="3dp"android:text="11111111"android:textSize="12sp"app:layout_constraintLeft_toLeftOf="@+id/TextViewRetDataEM4305"app:layout_constraintRight_toRightOf="@+id/TextViewRetDataEM4305"app:layout_constraintTop_toBottomOf="@+id/TextViewlabel10" /><Buttonandroid:id="@+id/btnReadEM4305"android:layout_width="wrap_content"android:layout_height="40dp"android:layout_marginRight="20dp"android:onClick="read4305"android:text="读卡"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/btnWriteEM4305"app:layout_constraintRight_toLeftOf="@+id/btnWriteEM4305" /><Buttonandroid:id="@+id/btnWriteEM4305"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="write4305"android:text="写卡"android:textSize="11sp"app:layout_constraintBottom_toTopOf="@+id/editTextDataEM4305"app:layout_constraintRight_toRightOf="parent" /><TextViewandroid:id="@+id/TextViewlabel11"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="数据速率:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/SpinnerDateRateEM4305"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="@+id/SpinnerDateRateEM4305" /><Spinnerandroid:id="@+id/SpinnerDateRateEM4305"android:layout_width="wrap_content"android:layout_height="wrap_content"android:entries="@array/datarateEM4305"android:spinnerMode="dropdown"android:theme="@style/my_spinner_style"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel11"app:layout_constraintTop_toBottomOf="@+id/editTextDataEM4305"></Spinner><TextViewandroid:id="@+id/TextViewlabel12"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="调制模式:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/SpinnerDateRateEM4305"app:layout_constraintRight_toLeftOf="@+id/SpinnerEncoderEM4305"app:layout_constraintTop_toTopOf="@+id/SpinnerDateRateEM4305" /><Spinnerandroid:id="@+id/SpinnerEncoderEM4305"android:layout_width="wrap_content"android:layout_height="wrap_content"android:entries="@array/EncoderEM4305"android:spinnerMode="dropdown"android:theme="@style/my_spinner_style"app:layout_constraintBottom_toBottomOf="@+id/SpinnerDateRateEM4305"app:layout_constraintRight_toRightOf="parent"></Spinner><Spinnerandroid:id="@+id/SpinnerLoginModeEM4305"android:layout_width="0dp"android:layout_height="wrap_content"android:entries="@array/loginmodeEM4305"android:spinnerMode="dropdown"android:theme="@style/my_spinner_style"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/SpinnerEncoderEM4305"></Spinner><TextViewandroid:id="@+id/TextViewlabel13"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="自动发送最大块:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/editTextMaxBlockEM4305"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="@+id/editTextMaxBlockEM4305" /><EditTextandroid:id="@+id/editTextMaxBlockEM4305"android:layout_width="25dp"android:layout_height="wrap_content"android:background="@drawable/shape4border"android:digits="0123456789"android:gravity="left"android:inputType="textCapCharacters"android:maxLength="2"android:paddingLeft="3dp"android:text="6"android:textSize="12sp"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel13"app:layout_constraintTop_toBottomOf="@+id/SpinnerLoginModeEM4305" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="范围:5-13块,时序从5块至最大块"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/editTextMaxBlockEM4305"app:layout_constraintLeft_toRightOf="@+id/editTextMaxBlockEM4305"app:layout_constraintTop_toTopOf="@+id/editTextMaxBlockEM4305" /><TextViewandroid:id="@+id/TextViewlabel14"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="配置值:"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/editTextConfigWordEM4305"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="@+id/editTextConfigWordEM4305" /><EditTextandroid:id="@+id/editTextConfigWordEM4305"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:paddingLeft="3dp"android:text="5F800100"android:textSize="12sp"app:layout_constraintLeft_toRightOf="@+id/TextViewlabel14"app:layout_constraintTop_toBottomOf="@+id/editTextMaxBlockEM4305" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:text="(十六进制)"android:textSize="12sp"app:layout_constraintBottom_toBottomOf="@+id/editTextConfigWordEM4305"app:layout_constraintLeft_toRightOf="@+id/editTextConfigWordEM4305"app:layout_constraintTop_toTopOf="@+id/editTextConfigWordEM4305" /><Buttonandroid:id="@+id/btnDefalutEM4305"android:layout_width="wrap_content"android:layout_height="40dp"android:layout_marginRight="20dp"android:onClick="default4305"android:text="← 默认值"android:textSize="11sp"app:layout_constraintBottom_toBottomOf="@+id/btnInitEM4305"app:layout_constraintRight_toLeftOf="@+id/btnInitEM4305" /><Buttonandroid:id="@+id/btnInitEM4305"android:layout_width="wrap_content"android:layout_height="40dp"android:onClick="init4305"android:text="设定配置"android:textSize="12sp"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toBottomOf="@+id/TextViewlabel14" /></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.AdapterView;
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 EM4305Activity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_em4305);androidx.appcompat.widget.Toolbar toolbar=findViewById(R.id.toolbar);setSupportActionBar(toolbar);tv = findViewById(R.id.sample_text);tv.setText("操作结果");//增加输入监听事件// EM4305((EditText)findViewById(R.id.editTextMaxBlockEM4305)).setOnFocusChangeListener(new View.OnFocusChangeListener(){@Overridepublic void onFocusChange(View v,boolean FocusState) {if(FocusState){//进入焦点}else{//离开焦点updateset4305();}}});//数据速率Spinner spls;spls = findViewById(R.id.SpinnerDateRateEM4305);spls.setSelection(2);//RF/16spls.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {updateset4305();}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});//调制模式((Spinner)findViewById(R.id.SpinnerEncoderEM4305)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {updateset4305();}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});//加密模式((Spinner)findViewById(R.id.SpinnerLoginModeEM4305)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view, int position, long id) {updateset4305();}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});}@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 textclear4305(View view){TextView tvls;tvls = findViewById(R.id.TextViewRetDataEM4305);tvls.setText("");}public void changepwd4305(View view){byte i;byte j;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//旧密码byte[] mypiccserial = new byte[4];//卡序列号byte[] newpicckey = new byte[4];//新密码myctrlword = 0; //NEEDSERIAL:需要只对指定系列号的卡操作,NEEDKEY:需要用密码认证,LOCKBIT:锁定块,KEYENABLE:启用本卡的密码功能String strls;CheckBox cbls;EditText etls;cbls = findViewById(R.id.chkPwdEM4305);if(!cbls.isChecked()) {//本次操作需要密码验证tv.setText("EM4305卡修改卡密码必须带密码操作");return;}etls = findViewById(R.id.editTextPwdEM4305);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.chkUidNeedEM4305);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidEM4305);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("卡号长度不足8位");return;}for (i = 0; i < 4; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}etls = findViewById(R.id.editTextPwdNewEM4305);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.em4305changekey(myctrlword,mypiccserial,oldpicckey,newpicckey);if(status == 0){strls = "卡号[";strls += String.format("%02X%02X%02X%02X",mypiccserial[0],mypiccserial[1],mypiccserial[2],mypiccserial[3]);strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataEM4305);tvls.setText(strls);strls = "EM4305卡修改卡密码成功";ouridr.beep(38);}else{if(status == 8){strls = "请将卡放在感应区";}else if(status == 23){strls = "错误代码:23,读卡器未插入";}else if(status == 1){strls = "错误代码:1,卡放得远 或 需要密码才能写卡";}else if(status == 12){strls = "错误代码:12,卡放得远 或 密码错误";}else{strls = "错误代码:" + Integer.toString(status);}}tv.setText(strls);}public void read4305(View view){byte i;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//密码byte[] mypiccserial = new byte[4];//卡序列号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.chkPwdEM4305);if(cbls.isChecked()) {//本次操作需要密码验证etls = findViewById(R.id.editTextPwdEM4305);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.chkUidNeedEM4305);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidEM4305);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("卡号长度不足8位");return;}for (i = 0; i < 4; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}//操作块标志mypiccblockflag[0] = 0;cbls = findViewById(R.id.chkB0EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 1;}cbls = findViewById(R.id.chkB1EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 2;}cbls = findViewById(R.id.chkB3EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 8;}cbls = findViewById(R.id.chkB4EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 16;}cbls = findViewById(R.id.chkB5EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 32;}cbls = findViewById(R.id.chkB6EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 64;}cbls = findViewById(R.id.chkB7EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 128;}mypiccblockflag[1] = 0;cbls = findViewById(R.id.chkB8EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 1;}cbls = findViewById(R.id.chkB9EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 2;}cbls = findViewById(R.id.chkB10EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 4;}cbls = findViewById(R.id.chkB11EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 8;}cbls = findViewById(R.id.chkB12EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 16;}cbls = findViewById(R.id.chkB13EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 32;}cbls = findViewById(R.id.chkB14EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 64;}cbls = findViewById(R.id.chkB15EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 128;}status = ouridr.em4305read(myctrlword,mypiccserial,oldpicckey,mypiccblockflag,mypiccdata);if(status == 0){strls = "卡无线转输分频比[" + Integer.toString(mypiccdata[0]) + "],卡号[";strls += String.format("%02X%02X%02X%02X",mypiccserial[0],mypiccserial[1],mypiccserial[2],mypiccserial[3]);strls += "],卡数据[";for (i = 0; i < mypiccdata[1]; i++) {strls += String.format("%02X",mypiccdata[i+2]);}strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataEM4305);tvls.setText(strls);strls = "读EM4305卡成功";ouridr.beep(38);}else{if(status == 8){strls = "请将卡放在感应区";}else if(status == 23){strls = "错误代码:23,读卡器未插入";}else if(status == 4){strls = "错误代码:4,卡放得远 或 需要密码才能读卡";}else if(status == 12){strls = "错误代码:12,卡放得远 或 密码错误";}else{strls = "错误代码:" + Integer.toString(status);}}tv.setText(strls);}public void write4305(View view){byte i;byte j;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//密码byte[] mypiccserial = new byte[4];//卡序列号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.chkPwdEM4305);if(cbls.isChecked()) {//本次操作需要密码验证etls = findViewById(R.id.editTextPwdEM4305);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.chkUidNeedEM4305);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidEM4305);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("卡号长度不足8位");return;}for (i = 0; i < 4; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}//操作块标志j = 0;mypiccblockflag[0] = 0;cbls = findViewById(R.id.chkB0EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 1;j++;}cbls = findViewById(R.id.chkB1EM4305);if(cbls.isChecked()) {tv.setText("块1为只读,不允许写");return;}cbls = findViewById(R.id.chkB3EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 8;j++;}cbls = findViewById(R.id.chkB4EM4305);if(cbls.isChecked()) {tv.setText("块4为配置区,只能在初始化函数中操作");return;}cbls = findViewById(R.id.chkB5EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 32;j++;}cbls = findViewById(R.id.chkB6EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 64;j++;}cbls = findViewById(R.id.chkB7EM4305);if(cbls.isChecked()) {mypiccblockflag[0] += 128;j++;}mypiccblockflag[1] = 0;cbls = findViewById(R.id.chkB8EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 1;j++;}cbls = findViewById(R.id.chkB9EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 2;j++;}cbls = findViewById(R.id.chkB10EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 4;j++;}cbls = findViewById(R.id.chkB11EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 8;j++;}cbls = findViewById(R.id.chkB12EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 16;j++;}cbls = findViewById(R.id.chkB13EM4305);if(cbls.isChecked()) {mypiccblockflag[1] += 32;j++;}cbls = findViewById(R.id.chkB14EM4305);if(cbls.isChecked()) {tv.setText("块14为锁定标志块,只能在初始化函数中操作");return;}cbls = findViewById(R.id.chkB15EM4305);if(cbls.isChecked()) {tv.setText("块15为锁定标志块,只能在初始化函数中操作");return;}//写卡数据准备if(j == 0){tv.setText("请先选择需要写入的块");return;}etls = findViewById(R.id.editTextDataEM4305);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.em4305write(myctrlword,mypiccserial,oldpicckey,mypiccblockflag,mypiccdata);if(status == 0){strls = "卡号[";strls += String.format("%02X%02X%02X%02X",mypiccserial[0],mypiccserial[1],mypiccserial[2],mypiccserial[3]);strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataEM4305);tvls.setText(strls);strls = "写EM4305卡成功";ouridr.beep(38);}else{if(status == 8){strls = "请将卡放在感应区";}else if(status == 23){strls = "错误代码:23,读卡器未插入";}else if(status == 1){strls = "错误代码:1,卡放得远 或 需要密码才能写卡";}else if(status == 12){strls = "错误代码:12,卡放得远 或 密码错误";}else{strls = "错误代码:" + Integer.toString(status);}}tv.setText(strls);}public void default4305(View view){EditText etls;Spinner spls;etls = findViewById(R.id.editTextConfigWordEM4305);etls.setText("5F800100");etls = findViewById(R.id.editTextMaxBlockEM4305);etls.setText("6");spls = findViewById(R.id.SpinnerDateRateEM4305);//数据速率spls.setSelection(2);spls = findViewById(R.id.SpinnerEncoderEM4305);//调制模式spls.setSelection(0);spls = findViewById(R.id.SpinnerLoginModeEM4305);//加密模式spls.setSelection(0);}public void updateset4305(){EditText etls;EditText etMaxBlock;Spinner spls;String strls;byte i;byte[] Configdata = new byte[4];//配置值etls = findViewById(R.id.editTextConfigWordEM4305);strls = etls.getText().toString().trim();if(strls.length() < 8){strls = "5F800100";Configdata[0] = 0x5F;Configdata[1] = (byte)0x80;Configdata[2] = 0x01;Configdata[3] = 0x00;}else {for (i = 1; i < 4; i++) {Configdata[i] = (byte)Integer.parseInt(strls.substring(i * 2, i * 2 + 2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}}spls = findViewById(R.id.SpinnerDateRateEM4305);//数据速率i = (byte)(spls.getSelectedItemId());Configdata[0] = 0x00;if(i == 0){//RF/32Configdata[0] |= 0x0f;}else if(i == 1) {//RF/40Configdata[0] |= 0x13;}else {//RF/64或其他Configdata[0] |= 0x1f;}spls = findViewById(R.id.SpinnerEncoderEM4305);//调制模式i = (byte)(spls.getSelectedItemId());if(i == 0){//曼切斯特码Configdata[0] |= 0x40;}else if(i == 1) {//Biphase码Configdata[0] |= 0x80;}else {//其他}Configdata[1] &= 0x3c;Configdata[2] &= 0x80;//自动发送最大块etMaxBlock = findViewById(R.id.editTextMaxBlockEM4305);strls = etMaxBlock.getText().toString().trim();if(strls.length() < 1){i = 6;etMaxBlock.setText("6");}else {i = (byte)Integer.parseInt(strls,10);if((i < 5) || (i > 13)){i = 6;etMaxBlock.setText("6");}}Configdata[1] |=  ((i % 4) * 64);Configdata[2] |= ((i / 4) % 4);spls = findViewById(R.id.SpinnerLoginModeEM4305);//密码规则(也就是读登陆或写登陆)i = (byte)(spls.getSelectedItemId());if(i == 1){//0-1块任意读,3-15块需密码读,0-13块任意写,14-15块需密码写i = 0x01;}else if(i == 2) {//0-15任意读,0-15块需密码写i = 0x04;}else if(i == 3) {//0-1块任意读,3-15块需密码读,0-15块需密码写i = 0x05;}else {//0-15块任意读.0-13块任意写,14-15块需密码写i = 0x00;}Configdata[2] |= (i * 4);etls.setText(String.format("%02X%02X%02X%02X",Configdata[0],Configdata[1],Configdata[2],Configdata[3]));}public void init4305(View view){byte i;byte status;//存放返回值byte myctrlword;//控制字byte[] oldpicckey = new byte[4];//密码byte[] mypiccserial = new byte[4];//卡序列号byte[] mypiccdata = new byte[4];//写入数据缓冲myctrlword = 0; //NEEDSERIAL:需要只对指定系列号的卡操作,NEEDKEY:需要用密码认证,LOCKBIT:锁定块,KEYENABLE:启用本卡的密码功能String strls;CheckBox cbls;EditText etls;updateset4305();cbls = findViewById(R.id.chkPwdEM4305);if(cbls.isChecked()) {//本次操作需要密码验证etls = findViewById(R.id.editTextPwdEM4305);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.chkUidNeedEM4305);if(cbls.isChecked()) {//仅操作指定卡号的卡etls = findViewById(R.id.editTextUidEM4305);strls = etls.getText().toString().trim();if(strls.length() < 8){tv.setText("卡号长度不足8位");return;}for (i = 0; i < 4; i++) {mypiccserial[i] = (byte)Integer.parseInt(strls.substring(i*2,i*2+2),16);//只有用Integer.parseInt才能杜绝大于128时的错误}myctrlword += ouridr.NEEDSERIAL;}//配置值:etls = findViewById(R.id.editTextConfigWordEM4305);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.em4305init(myctrlword,mypiccserial,oldpicckey,mypiccdata);if(status == 0){strls = "卡号[";strls += String.format("%02X%02X%02X%02X",mypiccserial[0],mypiccserial[1],mypiccserial[2],mypiccserial[3]);strls += "]";TextView tvls = findViewById(R.id.TextViewRetDataEM4305);tvls.setText(strls);strls = "配置EM4305卡成功";ouridr.beep(38);}else{if(status == 8){strls = "卡不在感应区 或 密码不正确";}else if(status == 23){strls = "错误代码:23,读卡器未插入";}else if(status == 1){strls = "错误代码:1,卡放得远 或 需要密码才能写卡";}else if(status == 12){strls = "错误代码:12,卡放得远 或 密码错误";}else{strls = "错误代码:" + Integer.toString(status);}}tv.setText(strls);}}

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

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

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

相关文章

代码随想录算法训练营第九天|理论基础,232.用栈实现队列,225. 用队列实现栈

系列文章目录 代码随想录算法训练营第一天|数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 代码随想录算法训练营第二天|977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 代码随想录算法训练营第三天|链表理论基础&#xff…

React配置src根目录@

文章目录 1.打开webpack配置文件2.配置webpack 1.打开webpack配置文件 yarn eject or npm run eject 如果报错了记得提前 git commit一下 2.配置webpack 找到 webpack.config.js 文件在 webpack.config.js 文件中找到 alias 配置在alias里添加: path.resolve(src) , 或者 : pa…

提升开发效率的google插件

在如今的软件开发领域&#xff0c;Google Chrome浏览器的开发者插件扮演着至关重要的角色&#xff0c;为开发人员提供了丰富的工具和功能&#xff0c;从而提高了开发效率。下面介绍几款强大的 Google 插件&#xff0c;它们在不同方面为开发者提供了便利&#xff0c;并能显著提升…

MSVS C# Matlab的混合编程系列1 - 看似简单的问题引出

前言&#xff1a; 问题提出&#xff0c;如何把Matlab(本文简称MT)的算法集成到Visual Studio(本文简称VS)里面运行&#xff1f; 本文&#xff0c;通过编制一个MT中最简单的加法函数&#xff0c;我们把他做成 MSVS C#能够使用的动态库&#xff0c;说明了MSVS C# 和 MT集成的最…

下拉框联动控制,明细数据重复检查

1、明细数据重复检查针对下拉框的字段&#xff0c;在重新赋空值时没成功&#xff0c;被注释了。 2、下拉联动控制如图 价格类型&#xff1a;优惠价&#xff0c;门店价 与员工关系&#xff1a;本人&#xff0c;父母&#xff0c;儿女&#xff0c;兄弟姐妹 优惠类型&#xff1a…

精华推荐 |【深入浅出Sentinel源码】「源码探索专题」完整剖析Alibaba微服务架构体系之分布式系统的流量防卫兵的基本介绍(入门源码介绍)

整剖析Alibaba微服务架构体系之分布式系统的流量防卫兵的基本介绍 推荐资料Sentinel 是什么&#xff1f;Sentinel 具有以下特征: Maven的pom中配置main函数介绍总结说明自定义的rule加载规则 Sentinel的限流原理滑动时间窗口算法固定时间窗口算法普通的滑动窗口做法Sentinel的滑…

ReactNative中样式与布局的书写

样式 const styles StyleSheet.create({container: {flex: 1,justifyContent: center,alignItems: center,backgroundColor: #F5FCFF,}, welcome: {fontSize: 20, textAlign: center,margin: 10, }, instructions: {textAlign: center,color: #333333,marginBottom: 5,}, …

七省数据局密集挂牌,期待规范引领数据行业蓬勃发展

今年开年以来&#xff0c;新一轮机构改革逐步在省级层面落地&#xff1a;多个省级数据局纷纷挂牌&#xff0c;全国各省市数据要素化市场加速推动。 1月10日&#xff0c;江苏省数据局率先正式挂牌&#xff0c;这是2023年国家数据局正式揭牌后&#xff0c;第一个成立的省级数据局…

AE/PR/达芬奇视频去闪烁插件---Flicker Free

Flicker Free是一款视频处理工具&#xff0c;主要用于去除视频中的闪烁和闪光问题&#xff0c;提高视频质量。它可以帮助用户快速、方便地处理视频&#xff0c;使其更加流畅、清晰。Flicker Free可以作为After Effects、Premiere Pro、Final Cut Pro、Avid、Resolve或Vegas的插…

C++ Linux动态库的编译和调用

一、C动态库编译 采用g编译C动态库&#xff0c;命令如下&#xff1a; g -fPIC -shared -o 动态库名 cpp文件名1.1 关于fPIC选项 首先了解动态库的载入时重定位。 一般linux的可执行文件都是elf格式&#xff08;一种二进制文件格式&#xff09;&#xff0c;在可执行文件的头部包…

【GaussDB数据库】序

参考链接1&#xff1a;国产数据库华为高斯数据库&#xff08;GaussDB&#xff09;功能与特点总结 参考链接2&#xff1a;GaussDB(DWS)介绍 GaussDB简介 官方网站&#xff1a;云数据库GaussDB GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务&#xff0c;…

Unity之射线检测

不知道大家有没有玩过红色警戒 —— 一款即时战略游戏&#xff0c;和罪恶都市一样小编小学的时候就开始玩了&#xff0c;这款游戏控制单位角色移动是通过鼠标的点击来实现。 同样的操作方法还有英雄联盟等很多游戏&#xff0c;那本篇文章小编就通过简单小实例来讲解这种操作在U…

2024最新Java高频面试题总结(附答案PDF)春招面试必备!

《Java面试全解析》1000道 面试题大全详解 本人是 2009 年参加编程工作的&#xff0c;一路上在技术公司摸爬滚打&#xff0c;前几年一直在上海&#xff0c;待过的公司有 360 和游久游戏&#xff0c;因为自己家庭的原因&#xff0c;放弃了阿里钉钉团队的 offer 回到了西安。 从…

openfire源码篇(一)检出源码并运行

openfire源码篇&#xff08;一&#xff09;检出源码并运行 源码检出 官方github地址 https://github.com/igniterealtime/Openfire 检出源码到本地&#xff08;请注意你的java版本&#xff0c;我检出的openfire 为 4.9.0-SNAPSHOT 此时jdk版本应为11&#xff09; 将源码检出…

通过OpenIddict设计一个授权服务器02-创建asp.net项目

在这一部分中&#xff0c;我们将创建一个ASPNET核心项目&#xff0c;作为我们授权服务器的最低设置。我们将使用MVC来提供页面&#xff0c;并将身份验证添加到项目中&#xff0c;包括一个基本的登录表单。 创建一个空的asp.net core项目 正如前一篇文章中所说&#xff0c;授权…

苹果Find My可查找添加32件物品,伦茨科技ST17H6x芯片加速产品赋能

苹果最近更新的支持文档证实&#xff0c;从 iOS 16 开始&#xff0c;"Find My"可查找添加物品从16件增加到32件&#xff0c;AirTag 和“查找”网络中的物品利用“查找”网络的强大功能来发挥作用&#xff0c;这个网络由数亿台加密的匿名 Apple 设备构成。“查找”网络…

数据结构之栈的基本操作

该顺序栈涉及到了存储整型数据的顺序栈还有存储字符型数据的顺序栈 实现的功能有&#xff1a;入栈、出栈、判断是否为空栈、求栈的长度、清空栈、销毁栈、得到栈顶元素 此外根据上述功能&#xff0c;编写了数值转换&#xff08;十进制转化八进制&#xff09;方法、括号匹配方法…

Spring Boot - 利用Resilience4j-Circuitbreaker实现断路器模式_防止级联故障

文章目录 PreResilience4j概述Resilience4j官方地址Resilience4j-Circuitbreaker应用场景微服务演示Address servicePOMModelRepositoryServiceControllerData InitProperties测试 Order serviceModelRepositoryServiceSet UpProperties测试 探究断路器调用order-service API 2…

卷积和滤波对图像操作的区别

目录 问题引入 解释 卷积 滤波 问题引入 卷积和滤波是很相似的&#xff0c;都是利用了卷积核进行操作 那么他们之间有什么区别呢&#xff1f; 卷积&#xff1a;会影响原图大小 滤波&#xff1a;不会影响原图大小 解释 卷积 我们用这样一段代码来看 import torch.nn as …

【AI接口】语音版、文心一言大模型和AI绘图、图片检测API

文章目录 一、语音版大模型AI1、接口2、请求参数3、请求参数示例4、接口返回示例 二、AI图片鉴黄合规检测API1、接口2、请求参数3、请求参数示例4、接口返回示例5、报错说明6、代码开源 三、人工智能AI绘画API1、接口2、请求参数3、请求参数示例4、接口返回示例5、AI绘画成果展…