1. 程式人生 > >安卓掃描銀行卡獲取卡號資訊

安卓掃描銀行卡獲取卡號資訊

不得不說card.io開源的銀行卡掃描的三方庫真的是很好用啊,非常稀飯,使用簡單,而且給你提供的API很多,滿足大部分的需要(反正是滿足我的各種需求了)

首先上一個效果圖

1 對準銀行卡的四角就能夠掃描出來銀行卡資訊,你整合的話首先需要在你的module的gradle的依賴檔案中新增一句話,最好使用最新的版本號(後面就是最新的版本號的意思,因為人家辛辛苦苦修復了問題,不用多不合適)

compile 'io.card:android-sdk:latestversioncode'
2 清單檔案中加入如下Activity
<activity
            android:name="io.card.payment.CardIOActivity"
            android:configChanges="keyboardHidden|orientation"/>
        <activity android:name="io.card.payment.DataEntryActivity"/>
3 xml檔案中
<Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="onScanPress"
        android:text="銀行卡識別"/>


    <TextView
        android:id="@+id/card_tv"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="銀行卡號"/>
4 程式碼中

這裡面暴露了很多的API,大致查了一下有二十多個,比如是否隱藏LOGO標誌,是否需要銀行卡有效期的資訊,掃描線的顏色(預設是Color.GREEN),是否需要CVV資訊,郵政編碼等,下面對其介紹一下

        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, false); // default: false不需要     是否需要失效日期等資訊
        scanIntent.putExtra(CardIOActivity.EXTRA_HIDE_CARDIO_LOGO, false); // default: false               是否隱藏LOGO標記
        scanIntent.putExtra(CardIOActivity.EXTRA_USE_CARDIO_LOGO, true); // default: false               是否使用card.io LOGO

        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, false); // default: false不需要     郵政編碼
        scanIntent.putExtra(CardIOActivity.EXTRA_GUIDE_COLOR, Color.GREEN); // default: Color.GREEN      掃描線的顏色
        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false不需要              CVV資訊
全部程式碼如下
/**
 * 銀行卡識別
 */
public class CardIdentifyActivity extends BaseActivity {

    public static final int MY_SCAN_REQUEST_CODE = 10;

    public TextView mTextView;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_card_identify;
    }

    @Override
    protected void initView() {
        mTextView = (TextView) findViewById(R.id.card_tv);
    }

    @Override
    protected void afterInitView() {
        super.afterInitView();
        EventBus.getDefault().register(this);
    }

    @Subscribe
    public void onEventMainThread(UpdateCardNumberEvent event) {
        if (!TextUtils.isEmpty(event.getNumber())) {
            mTextView.setText(event.getNumber());
        }
    }

    public void onScanPress(View view) {
        Intent scanIntent = new Intent(this, CardIOActivity.class);

        // customize these values to suit your needs.
        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, false); // default: false不需要     是否需要失效日期等資訊
        scanIntent.putExtra(CardIOActivity.EXTRA_HIDE_CARDIO_LOGO, false); // default: false               是否隱藏LOGO標記
        scanIntent.putExtra(CardIOActivity.EXTRA_USE_CARDIO_LOGO, true); // default: false               是否使用card.io LOGO

        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_POSTAL_CODE, false); // default: false不需要     郵政編碼
        scanIntent.putExtra(CardIOActivity.EXTRA_GUIDE_COLOR, Color.GREEN); // default: Color.GREEN      掃描線的顏色
        scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false不需要              CVV資訊

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

    @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 = "Card Number: " + scanResult.cardNumber + "\n";
                Log.i("aaa", "銀行卡號:" + resultDisplayStr);
                EventBus.getDefault().post(new UpdateCardNumberEvent(resultDisplayStr));
                // Do something with the raw number, e.g.:
                // myService.setCardNumber( scanResult.cardNumber );
                if (scanResult.isExpiryValid()) {
                    resultDisplayStr += "Expiration Date: " + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n";
                    Log.i("aaa", "銀行卡號有效期:" + resultDisplayStr);

                }

                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.";
            }
            // do something with resultDisplayStr, maybe display it in a textView
            // resultTextView.setText(resultDisplayStr);
        }
        // else handle other activity results
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
}
最後掃描結果如下

最後附上github地址

相關推薦

掃描銀行卡獲取資訊

不得不說card.io開源的銀行卡掃描的三方庫真的是很好用啊,非常稀飯,使用簡單,而且給你提供的API很多,滿足大部分的需要(反正是滿足我的各種需求了) 首先上一個效果圖 1 對準銀行卡的四角就能夠掃描出來銀行卡資訊,你整合的話首先需要在你的module的gradle的依

Android 銀行卡掃描識別獲取

public class MyScanActivity extends Activity {final String TAG = getClass().getName();private Button scanButton;private TextView resultTextView;private int

實現銀行卡驗證

  /**      * 判斷是否是銀行卡號      * @author WJ      * @param cardNo      * @return      */     public static boolean checkBankCard(String cardN

控件獲取器uiautomatorviewer初體驗:"unable to connect to the adb. check if adb is installed correctly"

isn tdi pty all hal hot cep accep challenge 解決方法:轉自:https://plus.google.com/108487870030743970488/posts/2TrMqs1ZGQv Challenge Accepted:1.

開發:sd操作

use AS con AI string extern toast path 沒有 1.向sdcard中寫入數據: 發現向/mnt/sdcard路徑寫數據會報錯,原因:沒有開啟相應權限 解決:配置文件中加入 <uses-permission android:

Android平板裝置獲取唯一標識

測試機器: android平板    型號:aosonR103。Android版本:6.0 一開始使用的androidId,但是如果平板恢復出廠設定後,這個androidId就會發生變化,所以使用androidId並不能保證是唯一標識。但是發現裝置的序列號,卻可以在恢復出廠

ContentObserver模式獲取簡訊用正則自動填充驗證碼

最近做註冊的時候看到很多app在手機接受到簡訊的時候直接填寫驗證碼到介面省略使用者自動輸入,感覺這樣確實蠻人性化的呵呵,於是自己也做了一個 步驟: 首先我使用了ContentObserver監聽簡訊,(最好知道您的驗證碼從那個號碼發過來) 然後從簡訊中用正則的分組去拿到驗證

高階元件-------選項

選項卡是安卓高階元件中常用到的一種,能夠對頁面進行儉省,比如我們常用的qq介面,聯絡人,訊息等功能選項頁其實是在一個activity裡面的,對他們進行切換並沒有導致頁面的重新整理;再如,手機的電話功能包括了聯絡人,未接

、Java 獲取當天星期幾

安卓、Java中獲取當天是星期幾,非常方便實用的一個方法 /*獲取星期幾*/ public static String getWeek() { Calendar cal = Calendar.getInstance(); i

提示toast,避免相同資訊重複彈出

安卓開發過程中,提示肯定會用到。恰當的提示時方便讓使用者知道他們當前所做的動作產生的結果,好的提示自然是能夠提升使用者體驗,但是過度提示就會讓應用的使用者體驗變得糟糕。 就是這樣一個情景,當用戶連續操作某一個相同動作時,不至於相同的資訊連續不斷的提示。但是又不至於在使用者操

通過Application獲取當前Activity的例項(程式中不推薦儲存Activity的例項)

在應用開發過程中,我們經常遇到在Module與App的互動,如果在Module裡收到一條訊息或指令,需要App程式中彈出全域性的dialog,往往通過廣播的方式,交由App中當前顯示的Activity來實現,但是專案過大,尤其對於程式碼量龐大,人員混雜的專案,沒有一個Bas

中為了獲取context的方法和區別(getContext,getActivity,this,mainActivity.this等)

http://blog.csdn.net/wyl_1994/article/details/51605662 1.MainActivity.this:表示MainActivity物件,一般用在內部類中指示外面的this,如果在內部類直接用this,指示的是內部類本身。因

Unity移動裝置顯示Debug.Log資訊

最近忙著開發Unity原生外掛,由於演算法組先提供了安卓庫(略反人類),除錯的過程遇到了史無前例多的Debug需求。參考了一些外掛中採用的公共訊息管理,比如用一個靜態的回撥函式或者單獨寫一個類封裝的,這裡分享一下在Android上顯示Debug.Log()訊息的方法。 首先

程式碼中獲取dimen設定字型大小setTextSize,會變得比dimen的值還大——解決方法

holder.tvMsgContent.setTextSize(mContext.getResources().getDimensionPixelOffset(R.dimen.message_content_font));<dimen name="message_content_font">32p

Android | 教你如何在上實現通用證識別,一鍵各種繫結

目錄前言通用卡證識別的應用場景如何使用通用卡證識別服務整合通用卡證識別服務的關鍵流程開發實戰1 開發準備1.1 在專案級gradle裡新增華為maven倉1.2 在應用級的build.gradle裡面加上SDK依賴1.3 配置混淆指令碼1.4 在AndroidManifest.xml檔案裡面申請相機和儲存許可

專案實戰之關於獲取SD指定路徑和檔案的講解

前言 當我們將手機連線到電腦上時,我們發現在SD卡的根目錄下生成了成百上千的由各種應用程式建立的資料夾,導致我們也不知道哪個資料夾是用來幹嘛的,這正因為這樣安卓開發人員經常受到使用者的吐槽。 的確作為一個安卓開發者,我們的確不應該將我們應用的資料直接存到SD卡的根目錄下,這樣當手機安

獲取手機裝置硬體、系統、程式等資訊

真正的死亡是世界上再沒有一個人記得你。 —《尋夢環遊記》 分類 文章目錄 一、獲取手機系統資訊 1、獲取手機型號 2、獲取

獲取並輸出當前裝置的系統資訊

String TAG = "SystemInfo";String board = Build.BOARD;Log.i("TAG",String.Format("主機板資訊:%s",board));String brand = Build.BRAND;Log.i("TAG",String.Form

如何將APP報錯資訊寫入儲存,成為檔案

package com.itheima.mobilesafe74.global; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.lang.Thre

6.0(及以上)裝置上無法獲取無線網絡MAC地址的解決方案

在安卓6.0以下的裝置上,通過WifiManager.getConnectionInfo().getMacAddress()即可獲取WLAN實體地址, 而在6.0及以上,以此方式獲取到的MAC地址為固定值02:00:00:00:00:00,而非真實值 解決方案 WlanMacAddressGetter.