CV學習筆記(二十三):卡號格式化匹配

作者:雲時之間
來源:知乎
鏈接:https://zhuanlan.zhihu.com/p/143662990
編輯:王萌


在後續完成了銀行卡的識別之後,現在可以進行卡號覈驗和格式化的工作了,這些工作雖然沒有之前的那麼複雜,但是還是比較繁瑣的。

一:卡號檢測

來判斷銀行卡(儲蓄卡,信用卡)的卡號的合法性我們用到了Luhn算法

算法流程如下:

  1. 從右到左給卡號字符串編號,最右邊第一位是1,最右邊第二位是2,最右邊第三位是3….
  2. 從右向左遍歷,對每一位字符t執行第三個步驟,並將每一位的計算結果相加得到一個數s。
  3. 對每一位的計算規則:如果這一位是奇數位,則返回t本身,如果是偶數位,則先將t乘以2得到一個數n,如果n是一位數(小於10),直接返回n,否則將n的個位數和十位數相加返回。
  4. 如果s能夠整除10,則此號碼有效,否則號碼無效。

因爲最終的結果會對10取餘來判斷是否能夠整除10,所以又叫做模10算法。

算法代碼:

def luhn_checksum(card_number):
    def digits_of(n):
        return [int(d) for d in str(n)]
    digits = digits_of(card_number)
    odd_digits = digits[-1::-2]
    even_digits = digits[-2::-2]
    checksum = 0
    checksum += sum(odd_digits)
    for d in even_digits:
    return checksum % 10

def is_luhn_valid(card_number):
    return luhn_checksum(card_number) == 0

二:BIN碼校驗

銀行卡號一般是13-19位組成,國內一般是16,19位,其中16位爲信用卡,19位爲儲蓄卡,通常情況下都是由“卡BIN+髮卡行自定位+校驗位”這三部分構成,

銀行卡的前6位用來識別髮卡銀行或者髮卡機構的,稱爲髮卡行識別碼,簡稱爲卡BIN。拿出錢包裏的卡,會發現如果是隻帶有銀聯標註的卡,十有八九都是以62開頭的,但是也有例外。

這裏邊包含一個坑:你知道Bin碼的規則,但是你不知道國內銀行的BIN碼,網上的也大都不全,只能以後慢慢人工擴充。

我這邊整理了一份,但是也不全,大概包含有1300個BIN號,以後再慢慢整理

CV學習筆記(二十三):卡號格式化匹配
只需要將合法的卡號前6位切片出來進行查詢就好了。

文件地址:

鏈接:pan.baidu.com/s/1jnfITx
提取碼:ywud

三:模型上線

爲了讓模型快速上線,我用的是flask框架,然後返回一個json格式,還是比較方便的,這裏推薦使用Postman來檢測你的頁面的合法性,在《軟件測試技術大全》一書中,有個說法:

響應時間在4秒以內,大部分用戶可以接受;
4~9秒以內,30%的用戶選擇離開;
8~9秒,則有60%的用戶選擇離開;
超過10秒,則90%以上的用戶選擇離開。


現在我的訪問時間是3-6s,視網絡情況不等,仍有很多地方需要優化,比如模型載入,代碼耦合,特殊情況下的識別準確率等等,以及一些功能上的缺失,比如卡號有效期的識別等,這些地方仍需要不斷地改進。

CV學習筆記(二十三):卡號格式化匹配

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章