欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

go語言實現(xiàn)銀行卡號Luhn校驗

 更新時間:2022年05月19日 12:41:34   作者:dz45693  
這篇文章主要為大家介紹了go語言Luhn校驗測試銀行卡號碼的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

一、銀行卡號碼的校驗規(guī)則

銀行卡號碼的校驗采用Luhn算法,校驗過程大致如下:

1. 從右到左給卡號字符串編號,最右邊第一位是1,最右邊第二位是2,最右邊第三位是3….

2. 從右向左遍歷,對每一位字符t執(zhí)行第三個步驟,并將每一位的計算結(jié)果相加得到一個數(shù)s。

3. 對每一位的計算規(guī)則:如果這一位是奇數(shù)位,則返回t本身,如果是偶數(shù)位,則先將t乘以2得到一個數(shù)n,如果n是一位數(shù)(小于10),直接返回n,否則將n的個位數(shù)和十位數(shù)相加返回。

4. 如果s能夠整除10,則此號碼有效,否則號碼無效。

因為最終的結(jié)果會對10取余來判斷是否能夠整除10,所以又叫做模10算法。

二、生成符合Luhn規(guī)則的銀行卡號測試數(shù)據(jù)

前面既然摸清了銀行卡號的校驗規(guī)則,那么就可以根據(jù)此規(guī)則生成一些能夠通過Luhn校驗的測試數(shù)據(jù)。

思路:

因為最右邊的一位是奇數(shù)位,奇數(shù)位不需要改變值直接放啥就是啥,這個特性很重要,正好可以用來補齊到正好能夠整除10。

所以顯然能夠推測出生成n位符合Luhn規(guī)則的算法:

1. 隨機生成n-1位字符,稱為字符串x。

2. 先假設(shè)字符串x有n位(實際上最右邊一位缺失是n-1位,最后一位用0補上占位置),將x按照n位長度計算和s,

3. 上一步得到字符串x的校驗和s,將s加上一個數(shù)字y,使得它正好可以整除10,這個y就是最右邊第一位應(yīng)該放的數(shù)字。

4. x+y做字符串拼接運算,得到最終的n位符合Luhn規(guī)則的字符串。

整個代碼如下:

package main
import (
	"fmt"
	"math/rand"
	"strconv"
	"time"
)
func main() {
	fmt.Println(checkCarNum("6226095711989751"))
	cardNum := genCardNum("622609", 16)
	fmt.Println(cardNum)
	fmt.Println(checkCarNum(cardNum))
}
func checkCarNum(cardNum string) bool {
	sum, err := getCardNumSum(cardNum)
	if err != nil {
		return false
	}
	return sum%10 == 0
}
func getCardNumSum(cardNum string) (int64, error) {
	sum := int64(0)
	length := len(cardNum)
	index := length - 1
	for {
		t, err := strconv.ParseInt(string(cardNum[index]), 10, 64)
		if err != nil {
			return 0, err
		}
		if index%2 == 0 {
			t = t * 2
			if t >= 10 {
				t = t%10 + t/10
			}
		}
		sum += t
		if index <= 0 {
			break
		}
		index--
	}
	return sum, nil
}
func genCardNum(startWith string, totalNum int) string {
	result := startWith
	length := len(result)
	rand.New(rand.NewSource(time.Now().UnixNano()))
	for {
		result += fmt.Sprintf("%d", rand.Intn(10))
		if length == totalNum-1 {
			break
		}
		length++
	}
	sum, _ := getCardNumSum(result + "0")
	t := 10 - sum%10
	if t == 10 {
		t = 0
	}
	result += fmt.Sprintf("%d", t)
	return result
}

參考:銀行卡號碼校驗算法(Luhn算法,又叫模10算法) 

以上就是go語言實現(xiàn)銀行卡Luhn校驗的詳細內(nèi)容,更多關(guān)于go銀行卡Luhn校驗的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go可變參數(shù)函數(shù)的實現(xiàn)

    Go可變參數(shù)函數(shù)的實現(xiàn)

    可變參數(shù)函數(shù)是指函數(shù)參數(shù)的某個參數(shù)可有可無,即這個參數(shù)的個數(shù)可以為0會多個,可變參數(shù)函數(shù)參數(shù)在日常編程中大量使用,本文主要介紹了Go可變參數(shù)函數(shù)的實現(xiàn),感興趣的可以了解一下
    2023-12-12
  • Go源碼分析之預(yù)分配slice內(nèi)存

    Go源碼分析之預(yù)分配slice內(nèi)存

    這篇文章主要從Go語言源碼帶大家分析一下預(yù)分配slice內(nèi)存的相關(guān)知識,文中的示例代碼簡潔易懂,對我們深入了解go有一定的幫助,需要的可以學(xué)習(xí)一下
    2023-08-08
  • Hugo?Config模塊構(gòu)建實現(xiàn)源碼剖析

    Hugo?Config模塊構(gòu)建實現(xiàn)源碼剖析

    這篇文章主要為大家介紹了Hugo?Config模塊構(gòu)建實現(xiàn)源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • GoLang jwt無感刷新與SSO單點登錄限制解除方法詳解

    GoLang jwt無感刷新與SSO單點登錄限制解除方法詳解

    這篇文章主要介紹了GoLang jwt無感刷新與SSO單點登錄限制解除方法,JWT是一個簽名的JSON對象,通常用作Oauth2的Bearer token,JWT包括三個用.分割的部分。本文將利用JWT進行認證和加密,感興趣的可以了解一下
    2023-03-03
  • golang 實現(xiàn)tcp server端和client端,并計算RTT時間操作

    golang 實現(xiàn)tcp server端和client端,并計算RTT時間操作

    這篇文章主要介紹了golang 實現(xiàn)tcp server端和client端,并計算RTT時間操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 源碼剖析Golang中map擴容底層的實現(xiàn)

    源碼剖析Golang中map擴容底層的實現(xiàn)

    之前的文章詳細介紹過Go切片和map的基本使用,以及切片的擴容機制。本文針對map的擴容,會從源碼的角度全面的剖析一下map擴容的底層實現(xiàn),需要的可以參考一下
    2023-03-03
  • Go語言標(biāo)準(zhǔn)庫之strconv的使用

    Go語言標(biāo)準(zhǔn)庫之strconv的使用

    本文主要介紹了Go語言標(biāo)準(zhǔn)庫之strconv的使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go每日一庫之quicktemplate的使用

    Go每日一庫之quicktemplate的使用

    quicktemplate快速、功能強大、易于使用的Go模板引擎。比html/模板快20倍,本文我們就詳細的介紹一下quicktemplate的具體使用,感興趣的可以了解一下
    2021-07-07
  • Go get命令使用socket代理的方法

    Go get命令使用socket代理的方法

    由于某些不可描述的原因,國內(nèi)使用 go get 命令安裝某些包的時候會超時導(dǎo)致失敗,比如 net 包、 sys 包、 tools 包等。這篇文章給大家介紹go get 命令使用socket 代理的方法,感興趣的朋友一起看看吧
    2018-10-10
  • golang之反射和斷言的具體使用

    golang之反射和斷言的具體使用

    這篇文章主要介紹了golang之反射和斷言的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論