Android扫描银行卡获取银行卡号

2023-10-31

card.io开源的银行卡扫描的三方库真的是很好用啊。

首先需要在你的module的gradle的依赖文件中添加依赖

compile 'io.card:android-sdk:5.5.1'

2 清单文件中加入如下Activity

<!-- Permission to vibrate - recommended, allows vibration feedback on scan -->
    <uses-permission android:name="android.permission.VIBRATE" />

    <!-- Permission to use camera - required -->
    <uses-permission android:name="android.permission.CAMERA" />

    <!-- Camera features - recommended -->
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
    <uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<activity
     android:name="io.card.payment.CardIOActivity"
     android:configChanges="keyboardHidden|orientation" />

<activity android:name="io.card.payment.DataEntryActivity" />

3 xml文件中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.dell.scanbankdemo.MainActivity">

    <Button
        android:id="@+id/btn_scan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="扫描银行卡" />

    <TextView
        android:id="@+id/tv_card_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="银行卡号:"
        />
</LinearLayout>

全部代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    public static final int MY_SCAN_REQUEST_CODE = 10;

    private Button mScanBtn;
    private TextView mNumberTv;//银行卡号

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mScanBtn = findViewById(R.id.btn_scan);
        mScanBtn.setOnClickListener(this);
        mNumberTv = findViewById(R.id.tv_card_number);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_scan:
                Intent scanIntent = new Intent(this, CardIOActivity.class);

                // customize these values to suit your needs.
                scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true); // default: false
                scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false
                scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, false); // default: false

                // MY_SCAN_REQUEST_CODE is arbitrary and is only used within this activity.
                startActivityForResult(scanIntent, MY_SCAN_REQUEST_CODE);

                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == MY_SCAN_REQUEST_CODE) {
            String resultDisplayStr;
            if (data != null && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {
                CreditCard scanResult = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT);

                // Never log a raw card number. Avoid displaying it, but if necessary use getFormattedCardNumber()
                //resultDisplayStr = "银行卡号: " + scanResult.getRedactedCardNumber() + "\n"; //只显示尾号
                resultDisplayStr = "银行卡号: " + scanResult.getFormattedCardNumber() + "\n";  //显示银行卡号

                // Do something with the raw number, e.g.:
                // myService.setCardNumber( scanResult.cardNumber );

                if (scanResult.isExpiryValid()) {
                    resultDisplayStr += "有效期:" + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n";
                }

                if (scanResult.cvv != null) {
                    // Never log or display a CVV
                    resultDisplayStr += "CVV has " + scanResult.cvv.length() + " digits.\n";
                }

                if (scanResult.postalCode != null) {
                    resultDisplayStr += "Postal Code: " + scanResult.postalCode + "\n";
                }
            } else {
                resultDisplayStr = "Scan was canceled.";
            }
            mNumberTv.setText(resultDisplayStr);
            // do something with resultDisplayStr, maybe display it in a textView
            // resultTextView.setText(resultDisplayStr);
        }
    }
}

附上github地址
https://github.com/card-io/card.io-Android-SDK

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android扫描银行卡获取银行卡号 的相关文章

  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to
  • Android第一次动画不流畅

    我正在尝试一个动画将 imageView 从屏幕底部滑动到屏幕中心 但是当我第一次执行此动画时 它不平滑 但当第二次执行动画时 它是正常且平滑的 我几乎尝试了所有方法 但无法解决我的问题 这是我的动画文件
  • 如何将安卓手机从睡眠状态唤醒?

    如何以编程方式将 Android 手机从睡眠状态唤醒 挂起至内存 我不想获取任何唤醒锁 这意味着手机在禁用 CPU 的情况下进入 真正的 睡眠状态 我想我可以使用某种RTC 实时时钟 机制 有人有例子吗 Thanks 为了让Activity
  • 为什么将函数参数声明为最终的?

    我目前正在阅读 Sams 出版的 24 小时自学 Android 应用程序开发 一书 我对 Java Android 或其他方面还比较陌生 我对 ActionScript 3 有非常扎实的背景 它与 Java 有足够的相似之处 因此该语言本
  • 共同的偏好不断消失

    我正在使用共享首选项来存储我的应用程序的登录凭据 除了一个用户之外 一切正常 一段时间后 共享偏好似乎会以某种方式重置或清除 我已针对该用户调整了我的应用程序 使其不再清除他的共享偏好设置 这样我就可以确定这不是我的应用程序的错 但即使在这
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • 更新到材质 1.2.0 后,材质按钮上缺少圆角半径属性

    这是我的材质按钮代码
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 当手机旋转(方向改变)时如何最好地重新创建标记/折线

    背景 开发一个使用 Android Google Map v2 的本机 Android 应用程序 使用android support v4 app FragmentActivity 在 Android v2 2 上运行 客观的 在更改手机方
  • 使用 Espresso 检查 EditText 的字体大小、高度和宽度

    如何使用 Espresso 检查 EditText 的字体大小 高度和宽度 目前要分割我使用的文本 onView withId R id editText1 perform clearText typeText Amr 并阅读文本 onVi
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重

随机推荐

  • vuecli打包的项目在本地的nginx上访问不了?

    操作过程 1 所有的配置都没有动过 vuecli的所以打包配置 2 npm run build打包 3 把打包的dist 所有文件 放到解压后的ngnix的html里 4 通过127 0 0 1 80 dist index html访问 情
  • 计算机怎么远程桌面,电脑怎么打开远程桌面连接功能

    远程桌面连接是电脑ip地址使用到最强大的功能 电脑怎么开启远程桌面连接呢 下面由学习啦小编为你整理了电脑怎么打开远程桌面连接功能的解决方法 希望对你有帮助 电脑打开远程桌面连接的方法如下 设置静态IP地址 1右键点击电脑桌面的 网络 进入
  • Idea卡在Resolving Maven dependencies的解决方案

    Idea卡在Resolving Maven dependencies的解决方案 在Reimpot All Maven Porjects时 如果项目过大 maven依赖过多 会直接卡在Resolving Maven dependencies这
  • Visual Studio 2022 升级不再附带 .NET Framework 4.5 这种古老的目标包了,本文帮你装回来...

    就在北京时间 2021 年 11 月 9 日凌晨 Visual Studio 2022 正式发布了 着急升级的小伙伴兴致勃勃地升级并卸载了原来的 Visual Studio 2019 后 发现自己的几个库项目竟然无法编译通过了 究其原因 是
  • Myeclipse中workspace打不开的处理办法

    当在Myeclipse中出现这种情况时 可进行如下操作 找到workspace中的下列文件 删除后 重启Myeclipse就可以了 转载于 https my oschina net mikezhaoweb blog 298347
  • Python之使用Python发送HTTP请求

    coding utf 8 import urllib urllib2 url http www love sysu com cloud data name 陈钰 id 12353032 para urllib urlencode data
  • 列表的合并与排序

    读入两行 两行的格式一样 都是用空格分隔的若干个整数 将这些数合并到一个列表中 降序排列后输出整个列表 提示 list1 list map int input split 读入一行由空格分隔的整数 将其存入list1列表中 输入 输入为两行
  • Flutter 设置Container高度自适应GridView和ListView

    参考 1 去掉Container的高度 2 添加下面语句 physics NeverScrollableScrollPhysics shrinkWrap true 完整代码如下 Widget imageSection1 imgPath im
  • ns3链路拥塞实验

    实验目的 收集和分析不同背景流下的路径丢包率与时延性能 拓扑结构 仿真网络拓扑 n0 n5 10 Mb s 2ms n1 n3 10Mb s 10ms n4 n6 n2 n7
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • css 预处理器

    由于多个项目中用到了sass和less 所以就学习了一下相关知识 记录下来方便随时查看 前言 css是用来编写网站样式 但是 其写法比较一成不变 如果想要使用 css 实现 js 一样的变量 常量等 就会比较臃肿 难以维护 所以 作为css
  • 使jira支持reopen率的统计

    jira本身并不能统计bug的reopen率 虽然bug工作流程中有reopen节点 只能借助第三方插件来处理 插件名称 Enhancer Plugin for JIRA 此插件支持自定义字段 自定义计数器等等高级操作 在插件管理中搜索插件
  • docker基础3——制作镜像(基于容器)

    文章目录 一 基本了解 1 1 镜像结构 1 2 docker存储驱动 1 2 1 AUFS 1 2 2 OverlayFS 1 2 3 DeviceMapper 1 3 镜像仓库 二 镜像制作 2 1 基于容器制作镜像 三 镜像导入与导出
  • 双指针的实践

    一 原理 双指针 指的是在遍历对象的过程中 不是普通的使用单个指针进行访问 而是使用两个相同方向 快慢指针 或者相反方向 对撞指针 的指针进行扫描 从而达到相应的目的 换言之 双指针法充分使用了数组有序这一特征 从而在某些情况下能够简化一些
  • 第四章 频域滤波(傅里叶变换频域显示特性)

    一 傅里叶变换频域显示特性 在光学傅里叶变换中 人们已经习惯变换域中 的低谱部分位于中央 频域频谱分布中间低 周围高的特性 有利于频谱的解析和进行各种计算与分析 1 图像中心化 借助傅里叶变换的周期性和频率位移性质 可以对频域进行换位以使频
  • Navicat 11连接MYSQL 8.0问题

    一 问题 MySQL8 0 来使用的时候 通过sqlyog 或者程序中连接数据库时 提示 Authentication plugin caching sha2 password cannot be loaded 的错误 8 0改变了身份验证
  • 第三大的数、字符串中的单词数、排列硬币

    Java学习路线 搬砖工逆袭Java架构师 简介 Java领域优质创作者 CSDN哪吒公众号作者 Java架构师奋斗者 百日刷题计划 第 16 100 天 扫描主页左侧二维码 加入群聊 一起学习 一起进步 欢迎点赞 收藏 留言 大连棒棰岛
  • hbase集群在启动的时候报错:JAVA_HOME is not set and Java could not be found

    hbase集群在启动的时候报错 JAVA HOME is not set and Java could not be found 出现这种错误 一般应该是hbase下conf文件下的hbase env sh文件中的java home的环境变
  • 信息学奥赛一本通 1224:最大子矩阵

    题目链接 ybt 1224 最大子矩阵 ybt 1282 最大子矩阵 OpenJudge 2 6 1768 最大子矩阵 洛谷 P1719 最大加权矩形 题目考点 1 动态规划 线性动规 最大子段和 2 前缀和 解题思路 求二维最大子矩阵和
  • Android扫描银行卡获取银行卡号

    card io开源的银行卡扫描的三方库真的是很好用啊 首先需要在你的module的gradle的依赖文件中添加依赖 compile io card android sdk 5 5 1 2 清单文件中加入如下Activity