Android IC读写器安卓小程序 3

embedded/2024/12/28 9:13:54/

根据上期分析,完成了小程序的对IC卡和15693卡读取,现在对IC卡和T5557卡进行读取。

一以下是读取ID卡界面和代码: 

 

<?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=".IdCardActivity"><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="ID卡、HID卡测试页  "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"android:scrollbars="horizontal"app:layout_constraintBottom_toTopOf="@+id/sample_text"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toBottomOf="@+id/toolbar"app:layout_constraintVertical_bias="0.0"><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:padding="3dp"><Buttonandroid:id="@+id/btnReadID"android:layout_width="0dp"android:layout_height="wrap_content"android:onClick="idr_read"android:padding="3dp"android:text="读卡"app:layout_constraintEnd_toEndOf="@+id/btnReadOnceID"app:layout_constraintStart_toStartOf="@+id/btnReadOnceID"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/btnReadOnceID"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="idr_read_once"android:text="仅读一次,重新取放卡才能读到第二次"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btnReadID" /></androidx.constraintlayout.widget.ConstraintLayout></ScrollView></androidx.constraintlayout.widget.ConstraintLayout>

读取ID卡代码:

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.TextView;import com.reader.ouridr;public class IdCardActivity extends AppCompatActivity {private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_id_card);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();}//读ID卡public void idr_read(View view){byte status;//存放返回值byte[] idserial = new byte[5];String strls;status = ouridr.read(idserial);if(status == 0){ouridr.beep(38);strls = "读卡成功!16进制卡号为:";String strls1 = "0"+Integer.toHexString(idserial[0]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[1]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[2]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[3]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[4]);strls = strls + strls1.substring(strls1.length()-2);long cardhao;cardhao = idserial[1] & 0xff;cardhao *= 256;cardhao += idserial[2] & 0xff;cardhao *= 256;cardhao += idserial[3] & 0xff;cardhao *= 256;cardhao += idserial[4] & 0xff;String card8h10d = "000000000"+Long.toString(cardhao);//0305887634  123B7992card8h10d=card8h10d.substring(card8h10d.length()-10,card8h10d.length());strls=strls+"\n转8H10D码:"+card8h10d;String WG341="00000"+Integer.toString((idserial[3]& 0xff)*256+(idserial[4]& 0xff));WG341=WG341.substring(WG341.length()-5,WG341.length());String WG342="00000"+Integer.toString((idserial[1]& 0xff)*256+(idserial[2]& 0xff));WG342=WG342.substring(WG342.length()-5,WG342.length());strls=strls+"\n转韦根34码:"+WG341+WG342;String WG261="000"+Integer.toString(idserial[2]& 0xff);WG261=WG261.substring(WG261.length()-3,WG261.length());String WG262="00000"+Integer.toString((idserial[3]& 0xff)*256+(idserial[4]& 0xff));WG262=WG262.substring(WG262.length()-5,WG262.length());strls=strls+"\n转韦根26码:"+WG261+WG262;tv.setText(strls);} else {PrintErrInf(status);}}//仅读一次ID卡,重新取放卡才能读到第二次public void idr_read_once(View view){byte status;//存放返回值byte[] idserial = new byte[5];String strls;status = ouridr.readonce(idserial);if(status == 0){ouridr.beep(38);strls = "读卡成功!16进制卡号为:";String strls1 = "0"+Integer.toHexString(idserial[0]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[1]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[2]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[3]);strls = strls + strls1.substring(strls1.length()-2) +"-";strls1 = "0"+Integer.toHexString(idserial[4]);strls = strls + strls1.substring(strls1.length()-2);long cardhao;cardhao = idserial[1] & 0xff;cardhao *= 256;cardhao += idserial[2] & 0xff;cardhao *= 256;cardhao += idserial[3] & 0xff;cardhao *= 256;cardhao += idserial[4] & 0xff;String card8h10d = "000000000"+Long.toString(cardhao);//0305887634  123B7992card8h10d=card8h10d.substring(card8h10d.length()-10,card8h10d.length());strls=strls+"\n转8H10D码:"+card8h10d;String WG341="00000"+Integer.toString((idserial[3]& 0xff)*256+(idserial[4]& 0xff));WG341=WG341.substring(WG341.length()-5,WG341.length());String WG342="00000"+Integer.toString((idserial[1]& 0xff)*256+(idserial[2]& 0xff));WG342=WG342.substring(WG342.length()-5,WG342.length());strls=strls+"\n转韦根34码:"+WG341+WG342;String WG261="000"+Integer.toString(idserial[2]& 0xff);WG261=WG261.substring(WG261.length()-3,WG261.length());String WG262="00000"+Integer.toString((idserial[3]& 0xff)*256+(idserial[4]& 0xff));WG262=WG262.substring(WG262.length()-5,WG262.length());strls=strls+"\n转韦根26码:"+WG261+WG262;tv.setText(strls);} else {PrintErrInf(status);}}public void PrintErrInf(byte errcode) {String dispstr;switch(errcode){case 8:dispstr="错误代码:8,未寻到卡,请重新将卡放在ID卡读卡器感应区!";break;case 22:dispstr="错误代码:22,动态库或驱动程序异常!";break;case 23:dispstr="错误代码:23,发卡器未连接!";break;case 24:dispstr="错误代码:24,读卡器可能没有该功能!";break;default:dispstr="未知错误,错误代码:"+Integer.toString(errcode);break;}tv.setText(dispstr);}}

 

 


http://www.ppmy.cn/embedded/149405.html

相关文章

SpringBoot的MVC接口增加签名

一、确定签名策略 HMAC&#xff08;Hash-based Message Authentication Code&#xff09;&#xff1a;使用对称密钥。RSA&#xff1a;使用非对称密钥对&#xff08;公钥/私钥&#xff09;。OAuth&#xff1a;用于第三方授权和签名。 二、创建签名工具类 1、HMAC 签名工具类 …

游戏引擎学习第61天

回顾并计划接下来的事情 我们现在的目标是通过创建一个占位符版本的游戏来展示我们所做的工作。这个版本的游戏包含了许多基本要素&#xff0c;目的是快速构建一些东西&#xff0c;进行测试&#xff0c;并观察代码结构的形成。这些代码的实施是为了理解系统如何工作&#xff0…

华为 IPD,究竟有什么特点?(二)

关注作者 &#xff08;四&#xff09;华为版 IPD 特点四&#xff1a;一定要把差异化竞争力持 续建立在平台上 平台不仅带来研发效率的提升&#xff0c;更重要的是&#xff0c;它是技术竞争力的载体&#xff0c;是研发质 量的重要保证。 1&#xff09;为什么很多企业摆脱不了同…

外网访问 Docker 容器的可视化管理工具 DockerUI

DockerUI 是一个 docker 容器镜像的可视化图形化管理工具&#xff0c;DockerUI 可以用来轻松构建、管理和维护 docker 环境。让用户维护起来更方便。 本文就介绍如何安装使用 DockerUI 并结合路由侠内网穿透来访问 DockerUI。 第一步&#xff0c;安装 DockerUI 1&#xff0c;…

Seatunnel2.3.8 JDBC连接器开发

JDBC连接器开发 说明必要知识Seatunnel基础开发流程拉取项目编译构建运行工程样例打包发布 JDBC连接器开发包目录介绍食用技巧catalog中的类介绍dialect中的类介绍 说明 该文档旨在帮助开发人员&#xff0c;快速了解熟悉seatunnel2.3.8程序框架&#xff0c;并能够进行JDBC连接器…

大数据的尽头是数据中台吗?

大数据的尽头是数据中台吗&#xff1f; 2018年末开始&#xff0c;原市场上各种关于大数据平台的招标突然不见&#xff0c;取而代之的是数据中台项目&#xff0c;建设数据中台俨然成为传统企业数字化转型首选&#xff0c;甚至不少大数据领域的专家都认为&#xff0c;数据中台是…

ChatGPT 搜索工具被曝存在安全漏洞

据报道&#xff0c;OpenAI 的 ChatGPT 搜索存在安全问题&#xff0c;其反馈结果可以被页面的隐藏内容操纵&#xff0c;甚至可能反馈恶意代码。 英国卫报重点测试了 ChatGPT 搜索工具对包含隐藏内容的网页处理情况&#xff0c;此类隐藏内容可能包含来自第三方、可以更改 ChatGPT…

Day55 图论part05

并查集理论基础 并查集理论基础很重要,明确并查集解决什么问题,代码如何写,对后面做并查集类题目很有帮助。 并查集理论基础 | 代码随想录 总结 1.并查集主要有两个功能:主要就是集合问题 寻找根节点,函数:find(int u),也就是判断这个节点的祖先节点是哪个将两个节点接…