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接口才可…

如何学习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…

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;威…

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

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

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…

力扣hot100 二叉树中的最大路径和 递归

Problem: 124. 二叉树中的最大路径和 文章目录 解题方法复杂度&#x1f496; Code 解题方法 &#x1f468;‍&#x1f3eb; 参考思路 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code /*** Definition for a binary tree no…

云计算概述(发展过程、定义、发展阶段、云计算榜单)(一)

云计算概述&#xff08;一&#xff09; &#xff08;发展过程、定义、发展阶段、云计算榜单&#xff09; 本文目录&#xff1a; 零、00时光宝盒 一、前言 二、云计算的发展过程 三、云计算的定义 四、云计算发展阶段 五、云计算公司榜单看云计算兴衰 六、参考资料 零、0…

【Shell编程练习】编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态

系列文章目录 输出Hello World 通过位置变量创建 Linux 系统账户及密码 监控内存和磁盘容量&#xff0c;小于给定值时报警 猜大小 输入三个数并进行升序排序 系列文章目录编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态 编写脚本测试 192.…

大功率直流电子负载

大功率直流电子负载专门用于测试和模拟电源设备的设备&#xff0c;它可以模拟实际的负载情况&#xff0c;对电源设备进行各种性能参数的测试。这种设备在电源设备的研发、生产和质量控制中起着重要的作用。 大功率直流电子负载的主要特点有&#xff1a; 高功率&#xff1a;大功…

中科院自动化所:基于关系图深度强化学习的机器人多目标包围问题新算法

摘要&#xff1a;中科院自动化所蒲志强教授团队&#xff0c;提出一种基于关系图的深度强化学习方法&#xff0c;应用于多目标避碰包围(MECA)问题&#xff0c;使用NOKOV度量动作捕捉系统获取多机器人位置信息&#xff0c;验证了方法的有效性和适应性。研究成果在2022年ICRA大会发…

生鲜超市网站系统源码自营商城生鲜水果商城PC手机微信完整版

系统主要功能&#xff1a;商品管理、会员管理、订单管理、电子券管理、财务管理、门店管理等 后台管理&#xff1a;http://fresh.oostar.cn/admin 演示管理员登陆账号:yanshi 演示管理员登陆密码:yanshi888 pc前端站点&#xff1a;http://fresh.oostar.cn 移动端站点&…

淘宝搜索引擎API接口关键字搜索商品列表获取商品详情价格评论销量API

item_search-按关键字搜索淘宝商品 公共参数 查看API完整文档 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,it…