使用开源的card.io 扫描识别银行卡


最近遇到一个需要调研的需求:识别银行卡信息


具体要求如下:

如果识别出了银行卡信息,那么就把银行卡信息和银行卡图片 发送到后台

  如果  识别不了 最好把银行卡图片 截取下拉,送给后台,让后台去识别。yige

          在github上看到一个card.io的项目,于是down下来 看了一下,


识别效果:目前只识别出了 带突起银行卡号的 卡,具体还要看银行卡的破损程度。

如果卡号 位置( 也就是数字位置 )上门有金色的 或者高亮的 涂色,并且没有磨损,那么久很容易识别,比如新卡。


可以识别

 

如果 卡号位置 磨损了 ,导致卡号 高亮部分不明显,那么就识别不了 了。


识别不了


具体使用:


1:引入card.io  

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

     2  : (在onclick 中)加入开启扫描的代码

Onclick:{

scan(true);

}

 /**
     * 是否只识别卡 轮廓 图形。true:是, false:不仅识别轮廓图形 ,而且识别卡信息。
     *
     * @param isOnlyScanCard
     */
    public void scan(boolean isOnlyScanCard) {
        Intent intent = new Intent(this, CardIOActivity.class)
//                .putExtra(CardIOActivity.EXTRA_HIDE_CARDIO_LOGO, true)//去除水印
//                .putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, true)//去除键盘
//                .putExtra(CardIOActivity.EXTRA_LANGUAGE_OR_LOCALE, "zh-Hans")//设置提示为中文
//                .putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true)
//                .putExtra(CardIOActivity.EXTRA_SCAN_RESULT, true)
//                .putExtra(CardIOActivity.EXTRA_RETURN_CARD_IMAGE, true)
//                .putExtra(CardIOActivity.EXTRA_REQUIRE_CARDHOLDER_NAME, false)

                //当扫描卡 成功以后  触发 onCardDetected方法,true: 直接返回图 false:去下个界面校验卡信息
                .putExtra(CardIOActivity.EXTRA_SUPPRESS_SCAN, isOnlyScanCard)
                //是否生成图片的配置
                //根据源代码 分析,必须加如下组合配置,才能返回银行卡图片对象bitmap
                //if (origIntent != null && origIntent.getBooleanExtra(EXTRA_SUPPRESS_CONFIRMATION, false)) { 生成图片}
                .putExtra(CardIOActivity.EXTRA_SUPPRESS_CONFIRMATION, true)
                //是否返回图片 配置1
                //  if (intent == null || !intent.hasExtra(EXTRA_CAPTURED_CARD_IMAGE)) { return null;}
                .putExtra(CardIOActivity.EXTRA_CAPTURED_CARD_IMAGE, true)
                //是否返回图片 配置 2:源码没查到,单必须加
                .putExtra(CardIOActivity.EXTRA_RETURN_CARD_IMAGE, true)

//                .putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true) // default: sdk的银行卡信息验证页面  可以不要
                //控制用户是否被提示卡的cvv信息,(baidu :银行卡cvv信息)
                .putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false);// default: false
        // 扫描银行卡后会调整到银行卡的校验页面,让用户 输入日期校验,这里就是控制是否需要校验,
//                .putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, false);
//                .putExtra("debug_autoAcceptResult", true);


        startActivityForResult(intent, 300);
    }

    //扫描卡的详细信息
    public void reScanCardInfo() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //扫描卡的详细信息
                scan(false);
            }
        }, 500);
    }


3: 在onActivityResult 中接收扫描结果


 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String outStr = new String();
        if ((requestCode == 300) && data != null) {
//                && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {

            if (data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {
                //扫描出结果信息了:

                CreditCard result = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT);
                if (result != null) {
                    outStr += "Card number: " + result.cardNumber + "\n";
//                Bitmap bitmap = result.getCardType().imageBitmap(this);
//                ivBankcard.setImageBitmap(bitmap);
                    //
                    Bitmap returnBitmap = CardIOActivity.getCapturedCardImage(data);
                    ivBankcard.setImageBitmap(returnBitmap);
                }
                Toast.makeText(this, outStr, Toast.LENGTH_LONG).show();
            } else if (resultCode == CardIOActivity.RESULT_SCAN_SUPPRESSED) {
                //只扫描(识别)出了card图片,并没有完整扫描出卡信息
                Bitmap returnBitmap = CardIOActivity.getCapturedCardImage(data);
                ivBankcard.setImageBitmap(returnBitmap);

                //接着扫描 卡的详细信息。
                reScanCardInfo();
            }

        } else {
            Toast.makeText(this, "error", Toast.LENGTH_LONG).show();
        }

    }
















评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值