Android Studio安卓读取EM4100 TK4100卡卡号源码

本示例使用的读卡器:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-21818769070.35.44005b43nb1q2h&id=562957272162

<?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"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"   ><Buttonandroid:id="@+id/btnReadID"android:layout_width="0dp"android:layout_height="wrap_content"android:padding="3dp"android:onClick="idr_read"android:text="读卡"app:layout_constraintStart_toStartOf="@+id/btnReadOnceID"app:layout_constraintEnd_toEndOf="@+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>
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.mzph.cn/news/626616.shtml

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

相关文章

2024年【安全生产监管人员】复审考试及安全生产监管人员模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产监管人员复审考试是安全生产模拟考试一点通总题库中生成的一套安全生产监管人员模拟考试题库&#xff0c;安全生产模拟考试一点通上安全生产监管人员作业手机同步练习。2024年【安全生产监管人员】复审考试及…

Unity 编辑器篇|(六)编辑器拓展EditorGUI类 (全面总结 | 建议收藏)

目录 1. 前言2. 参数3. 功能3.1 折叠菜单&#xff1a; Foldout3.2 检查 GUI 更改&#xff1a; BeginChangeCheck 、EndChangeCheck 监听值改变3.3 可禁用控件&#xff1a;BeginDisabledGroup 、EndDisabledGroup 是否禁用组中的控件3.4 下拉菜单&#xff1a;DropdownButton3.5 …

CentOS7安装MySQL 错误:软件包:akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda)

问题如图所示 运行一下命令解决 yum -y remove mariadb-libsyum install mysql-community-server

PriorityBlockingQueue概念

四、PriorityBlockingQueue概念 4.1 PriorityBlockingQueue介绍 首先PriorityBlockingQueue是一个优先级队列&#xff0c;他不满足先进先出的概念。 会将查询的数据进行排序&#xff0c;排序的方式就是基于插入数据值的本身。 如果是自定义对象必须要实现Comparable接口才可…

mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql

以下是一些常见的MySQL查询语句&#xff0c;用于查询当天、近一周、近一个月和近一年的数据&#xff0c;以及一些常见的报表查询。 查询当天的数据&#xff1a; SELECT * FROM table_name WHERE DATE(date_column) CURDATE();查询近一周的数据&#xff1a; SELECT * FROM t…

如何学习three.js

如何学习three.js 前言1. 基础概念场景&#xff08;Scene&#xff09;&#xff1a; three.js中所有物体的容器。你可以把它想象成一个舞台&#xff0c;在这里添加物体、光源等。相机&#xff08;Camera&#xff09;&#xff1a; 决定了哪部分场景会被渲染。最常用的是透视相机&…

MongoDB面试系列-01

1. MongoDB 是什么&#xff1f; MongoDB是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。再高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。MongoDB旨在给Web应用提供可扩展的高性能数据存储解决方案。 MongoDB将数据存储…

机器学习算法实战案例:CNN-LSTM实现多变量多步光伏预测

文章目录 1 数据处理1.1 导入库文件1.2 导入数据集1.3 缺失值分析 2 构造训练数据​3 模型训练3.1 CNN-LSTM网络3.2 模型训练 4 模型预测答疑&技术交流机器学习算法实战案例系列 1 数据处理 1.1 导入库文件 from matplotlib import pyplot as pltimport tensorflow as tf…

PHP+MySQL组合开发:微信小程序万能建站源码系统 附带完整的搭建教程

随着移动互联网的快速发展&#xff0c;微信小程序已成为企业进行移动营销的重要工具。然而&#xff0c;对于许多中小企业和个人开发者来说&#xff0c;开发一个功能完善、用户体验良好的小程序是一项复杂的任务。罗峰给大家分享一款微信小程序万能建站源码系统。该系统采用PHPM…

SAP PP 常用表整理

表名描述AFFLWork ordersequence加工单顺序AENR工程变更管理AEOI工程变更管理AFFTOrder processinstructions订单&#xff0d;流程指令AFFVOrder processinstruction values订单-流程指令值AFKOOrder header data PPorders订单表头数据 PP 订单AFPOOrderitem订单项AFRUOrder co…

CMMI3.0认证的卓越方案!

CMMI3.0是软件工程和组织发展领域中的一项重要认证&#xff0c;它旨在提升组织的绩效和成熟度&#xff0c;促进卓越的软件开发和管理实践。本文将探讨CMMI3.0认证的意义、要求以及实施过程&#xff0c;并介绍一些卓越方案&#xff0c;帮助组织达到该认证。 CMMI3.0认证的意义 …

线控底盘新玩家凶猛!这家企业的ONE-BOX产品正式量产下线

高工智能汽车获悉&#xff0c;12月27日&#xff0c;威肯西科技宣布旗下ONE-BOX线控制动产品--液压解耦制动系统HDBS实现量产下线。该产品将与多个汽车品牌签署量产及定点协议&#xff0c;预计年产量达到60万套。 据了解&#xff0c;作为耀宁科技集团的一级子公司&#xff0c;威…

JS CRC16/XMODEM

const byteData HexString2Bytes("1A3B4C5D") let crc crc16(byteData) // CRC转换&#xff1a; A185 console.log("CRC转换&#xff1a;",crc)function crc16(buffer) {var crc 0x0000;var odd;for(var i 0; i < buffer.length; i) {crc ^ (buffer[…

【正点原子】STM32电机应用控制学习笔记——8.FOC简介

FOC是适用于无刷电机的&#xff0c;而像有刷电机&#xff0c;舵机&#xff0c;步进电机是不适用FOC的。FOC是电机应用控制难度最大的部分了。 一.FOC简介&#xff08;了解&#xff09; 1.介绍 FOC&#xff08;Filed Oriented Control&#xff09;即磁场定向控制&#xff0c;…

ITK imagedata三维体数据与VTK imagedata三维体数据的互相转换

VTK的三维imagedata转化为ITK的三维imagedata&#xff0c;以及和ITK的三维imagedata转化为VTK的三维imagedata的代码&#xff1a; #include <itkVTKImageToImageFilter.h> #include <vtkImageData.h> #include <itkImageToVTKImageFilter.h> #include <i…

MySQL 8.0中引入的选项和变量(三)

以下是在MySQL 8.0中新增的系统变量、状态变量和服务选项&#xff1a; • authentication_ldap_sasl_log_status: LDAP服务器日志级别。MySQL 8.0.11版本新增。 • authentication_ldap_sasl_max_pool_size: LDAP服务器最大连接池大小。MySQL 8.0.11版本新增。 • authenticat…

拼多多商家电话采集软件使用教程

拼多多作为一个中国著名的电商平台&#xff0c;拥有大量的商家信息。如果您需要采集拼多多商家的联系电话&#xff0c;可以使用Python编写一个简单的爬虫程序来实现。下面是一个基本的教程&#xff0c;帮助您使用拼多多商家电话采集软件。 步骤1&#xff1a;安装Python和相关库…

rust获取本地ip地址的方法

大家好&#xff0c;我是get_local_info作者带剑书生&#xff0c;这里用一篇文章讲解get_local_info的使用。 get_local_info是什么&#xff1f; get_local_info是一个获取linux系统信息的rust三方库&#xff0c;并提供一些常用功能&#xff0c;目前版本0.2.4。详细介绍地址&a…

【问题记录】使用命令语句从kaggle中下载数据集

从Kaggle中下载Tusimple数据集 1.服务器环境中安装kaggle 使用命令&#xff1a;pip install kaggle 2.复制下载API 具体命令如下&#xff1a; kaggle datasets download -d manideep1108/tusimple3.配置kaggle.json文件 如果直接使用命令会报错&#xff1a; root:~# kagg…

Pandas实战100例 | 案例 62: 计算累计统计量

案例 62: 计算累计统计量 知识点讲解 在数据分析中&#xff0c;计算累计统计量&#xff08;如累计和、累计最大值、累计最小值等&#xff09;是一种常见的操作。Pandas 提供了简单的方法来计算这些统计量。 计算累计统计量: cumsum(): 计算累计和。cummax(): 计算累计最大值…