



下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第go語(yǔ)言實(shí)現(xiàn)銀行卡號(hào)Luhn校驗(yàn)?zāi)夸浺?、銀行卡號(hào)碼的校驗(yàn)規(guī)則二、生成符合Luhn規(guī)則的銀行卡號(hào)測(cè)試數(shù)據(jù)思路:整個(gè)代碼如下:
一、銀行卡號(hào)碼的校驗(yàn)規(guī)則
銀行卡號(hào)碼的校驗(yàn)采用Luhn算法,校驗(yàn)過(guò)程大致如下:
1.從右到左給卡號(hào)字符串編號(hào),最右邊第一位是1,最右邊第二位是2,最右邊第三位是3.
2.從右向左遍歷,對(duì)每一位字符t執(zhí)行第三個(gè)步驟,并將每一位的計(jì)算結(jié)果相加得到一個(gè)數(shù)s。
3.對(duì)每一位的計(jì)算規(guī)則:如果這一位是奇數(shù)位,則返回t本身,如果是偶數(shù)位,則先將t乘以2得到一個(gè)數(shù)n,如果n是一位數(shù)(小于10),直接返回n,否則將n的個(gè)位數(shù)和十位數(shù)相加返回。
4.如果s能夠整除10,則此號(hào)碼有效,否則號(hào)碼無(wú)效。
因?yàn)樽罱K的結(jié)果會(huì)對(duì)10取余來(lái)判斷是否能夠整除10,所以又叫做模10算法。
二、生成符合Luhn規(guī)則的銀行卡號(hào)測(cè)試數(shù)據(jù)
前面既然摸清了銀行卡號(hào)的校驗(yàn)規(guī)則,那么就可以根據(jù)此規(guī)則生成一些能夠通過(guò)Luhn校驗(yàn)的測(cè)試數(shù)據(jù)。
思路:
因?yàn)樽钣疫叺囊晃皇瞧鏀?shù)位,奇數(shù)位不需要改變值直接放啥就是啥,這個(gè)特性很重要,正好可以用來(lái)補(bǔ)齊到正好能夠整除10。
所以顯然能夠推測(cè)出生成n位符合Luhn規(guī)則的算法:
1.隨機(jī)生成n-1位字符,稱為字符串x。
2.先假設(shè)字符串x有n位(實(shí)際上最右邊一位缺失是n-1位,最后一位用0補(bǔ)上占位置),將x按照n位長(zhǎng)度計(jì)算和s,
3.上一步得到字符串x的校驗(yàn)和s,將s加上一個(gè)數(shù)字y,使得它正好可以整除10,這個(gè)y就是最右邊第一位應(yīng)該放的數(shù)字。
4.x+y做字符串拼接運(yùn)算,得到最終的n位符合Luhn規(guī)則的字符串。
整個(gè)代碼如下:
packagemain
import(
"fmt"
"math/rand"
"strconv"
"time"
funcmain(){
fmt.Println(checkCarNum("6226095711989751"))
cardNum:=genCardNum("622609",16)
fmt.Println(cardNum)
fmt.Println(checkCarNum(cardNum))
funccheckCarNum(cardNumstring)bool{
sum,err:=getCardNumSum(cardNum)
iferr!=nil{
returnfalse
returnsum%10==0
funcgetCardNumSum(cardNumstring)(int64,error){
sum:=int64(0)
length:=len(cardNum)
index:=length-1
for{
t,err:=strconv.ParseInt(string(cardNum[index]),10,64)
iferr!=nil{
return0,err
ifindex%2==0{
t=t*2
ift=10{
t=t%10+t/10
sum+=t
ifindex=0{
break
index--
returnsum,nil
funcgenCardNum(startWithstring,totalNumint)string{
result:=startWith
length:=len(result)
rand.New(rand.NewSource(time.Now().UnixNano()))
for{
result+=fmt.Sprintf("%d",rand.Intn(10))
iflength==totalNum-1{
break
length++
sum,_:=getCardNumSum(result+"0")
t:=10-sum%10
ift==10{
t=0
result+=fmt.Sprintf("%d",t)
returnr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 滇西應(yīng)用技術(shù)大學(xué)《生物醫(yī)學(xué)光學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣西安全工程職業(yè)技術(shù)學(xué)院《建筑物抗震設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南旅游職業(yè)學(xué)院《vc程序設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西理工大學(xué)《新聞節(jié)目播音主持》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林農(nóng)業(yè)科技學(xué)院《計(jì)算機(jī)組成原理與匯編語(yǔ)言程序設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東建設(shè)職業(yè)技術(shù)學(xué)院《網(wǎng)絡(luò)及其計(jì)算》2023-2024學(xué)年第二學(xué)期期末試卷
- 北京理工大學(xué)珠海學(xué)院《電腦表現(xiàn)Ⅱsketchup草圖大師》2023-2024學(xué)年第二學(xué)期期末試卷
- 信陽(yáng)航空職業(yè)學(xué)院《信息設(shè)計(jì)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北金融學(xué)院《高分子膜材料》2023-2024學(xué)年第二學(xué)期期末試卷
- 上海工商職業(yè)技術(shù)學(xué)院《醫(yī)學(xué)分析化學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 毛竹腳手架搭設(shè)施工方案
- 鄭州住宅小區(qū)調(diào)研
- 基礎(chǔ)會(huì)計(jì)練習(xí)題及答案
- 鞋廠制革企業(yè)安全風(fēng)險(xiǎn)分級(jí)管控和隱患排查治理雙體系方案資料(2022-2023新標(biāo)準(zhǔn))
- 消防應(yīng)急預(yù)案流程圖
- 2022年最新小升初英語(yǔ)試卷(含答案)
- 二環(huán)庚二烯(2,5-降冰片二烯)的理化性質(zhì)及危險(xiǎn)特性表
- “轉(zhuǎn)觀念、勇?lián)?dāng)、強(qiáng)管理、創(chuàng)一流”對(duì)標(biāo)工作整改方案
- 模具試模通知單
- 全科醫(yī)師培訓(xùn)的全科門診主要內(nèi)容教學(xué)
- 蘇州納米所綜合考試要點(diǎn)
評(píng)論
0/150
提交評(píng)論