1. 興業銀行卡號的具體編碼規則
根據ISO標准,銀行卡長度一般在13-19位,國際上也有12位的。銀聯標准卡卡長度一般是在16-19位,雙組織卡也有13-19位的。
前6位數字:為發行者識別號碼(Issuer Identification Number,縮寫為IIN),也稱為發卡行識別碼(Bank Identification Number,簡稱BIN),由中國銀聯代國內各發卡機構統一向ISO申請,興業銀行一般都是622909開頭。
中間的位數(7-18位):為個人賬戶號碼(從卡號第七位開始),最大12位,最後一位位數是校驗位。
將卡號前面的數字採用Luhn演算法計算出信用卡或者借記卡的最後一位數字。
2. 什麼是「2121」校驗方法
2121校驗應該就是利用Luhn演算法
Luhn 演算法或是Luhn
公式,也被稱作「模10演算法」。它是一種簡單的校驗公式,一般會被用於身份證號碼,IMEI號碼,美國供應商識別號碼,或是加拿大的社會保險號碼的驗證。該演算法是由IBM的科學家Hans
Peter Luhn所創造,於1954年1月6日提出該專利的申請,並於1960年8月23日被授予,在美國的專利號為2950048。
該演算法一直都被大家所公用,並且時至今日應用也很廣泛。它被指定在ISO/IEC7812-1。它的目的不是成為一種加密安全的哈希函數;它的目的是防止意外出現的錯誤,而不是惡意攻擊。很多信用卡和眾多的政府身份識別號碼都使用該演算法從一系列的隨機數字中提取有效的數字。
優點和缺點
Luhn
演算法會檢測到任何單碼的錯誤以及幾乎所有的相鄰數字換位的錯誤。但是它不會檢測兩個數字序列09轉90的錯誤(反之亦然)。它會檢測到十分之七的相同雙位數錯誤(不會檢測到22和55的互換,33和66的互換,44和77的互換)。其他更復雜的檢查數字演算法,如費爾赫夫演算法,可以檢測出更多的轉錄錯誤。模N的Luhn演算法是Luhn演算法的一個擴展,支持非數字字元串。因為該演算法採取了從右向左的方式,而且零位會影響計算的結果。只有當零位造成了數位的移動或是用零來填充一串數字的開頭時才不會影響計算結果的生成。因此不論在將1234用零填充為0001234之前或是之後,使用Luhn演算法得到的結果都是一樣的。
該演算法在美國專利上是為了給手持或是機械設備計算校驗碼。所以它必須盡可能的簡單。
非正式的解釋
該公式會通過校驗碼對一串數字進行驗證。校驗碼通常會被加到賬戶號碼中,從而拼合成一個完整的賬戶號碼。拼合後的賬戶號碼要通過以下的測試:
1.從校驗位開始計數(校驗位一般添加在賬戶的最後面),按從右向左的順序,將偶數都乘以2.
2.將得到的結果相加起來(例如:10=1+0=1,14=1+4=5,也有的說法是若是乘2的結果是兩位數的話,那麼就直接減去9,和之前位數拆開相加的結果是一樣的),然後再與原數字串的奇數位相加。
3.如果加起來的和模10後為0(也就是相加的結果是以0結尾的,10的倍數),那麼這個數字串根據Luhn演算法來說就是有效的,反之就是無效的。
假設一個字元串為「7992739871」,我們為其加上一個校驗位,最後組成的數字為7992739871x:
賬戶號碼: 7 9 9
2 7 3
9 8 7 1 x
將偶數位乘以2:7 18 9 4 7 6 9
16 7 2
x
相加後的數字: 7 9 9 4 7 6 9 7 7
2 =67
校驗碼x是通過將相加後的數字乘以9後,在進行模10計算(那麼就是:(67*9)mod10,也有的說法是取比相加的和最小的10的整數倍數字,其實結果都是一樣的)。通俗地說:
1.計算所有位數的和(67)。
2.將其乘以9(603)。
3.取最後一位數字(3)。
4.得到的結果就是校驗位。
另外一種得到校驗位的方法:先計算所有位數的和,用10減去所有位數和模10的結果。(67的個位是7;10-7=3即為校驗位)。通俗地說:
1.計算所有位數的和(67)。
2.取個位數(7)。
3.用10減去個位數(3)。
4.得到的結果就是校驗位。
這樣,我們得到的完整的賬戶號碼是:7992739871x。
下面的每一個數字 79927398710, 79927398711, 79927398712, 79927398713, 79927398714,
79927398715, 79927398716, 79927398717, 79927398718,
79927398719都給以用如下的方法進行驗證。
1.從最右邊開始計算,將偶數位都乘以2:(1*2)=2,(8*2)=16,(3*2)=6,(2*2)=4,(9*2)=18
2.將每一位數字加起來:x(校驗位)+(2)+7+(1+6)+9+(6)+7+(4)+9+(1+8)+7=X+67.
3.如果得到的結果是10的倍數,那麼這個賬戶號碼就可能是有效的。需要注意的是3就是唯一的可以使得和(67+x)是10的整數倍的個位數。
4.因此,以上的所有賬戶除了79927398713 是有效的以外,其他均為無效的賬戶。
校驗位的驗證的代碼實現
以下通過Python來實現的:
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:
checksum += sum(digits_of(d*2))
return checksum % 10
def is_luhn_valid(card_number):
return luhn_checksum(card_number) == 0
校驗位的計算
上面的演算法檢查輸入校驗位的有效性。計算校驗位需要一個小的適應演算法,即:
1.切換奇/偶乘法。
2.如果得到的和(sum)模10等於0的話,那麼校驗碼就是0。
3.否則,校驗碼就等於10減去得到的和模10(10 - (sum mod 10))
def calculate_luhn(partial_card_number):
return 10 - luhn_checksum(int(partial_card_number) * 10)
3. 一個銀行卡號是19位,前面18位是有簡單規律的,最後一位是校驗位,通過luhn演算法得到。規則為:
= A1&10-MOD(SUM(2 * MID(A1,ROW($ 1:$ 10)* 2-1,1)-9 *(MID(A1,ROW($ 1:$ 10)* 2-1 ,1)-4> 0))+ SUM( - MID(A1,ROW($ 1:$ 9)* 2,1)),10)公式用CTRL + SHIFT + ENTER三到結束。
4. 富滇銀行借記卡不支持BIn是什麼意思
銀行卡有唯一的卡bin 供銀行和銀行卡產品之類區分, 這個提示就是你這個銀行卡不支持。
實名認證有兩種方式,一種是快捷認證,一種是普通認證。
1.快捷認證就是要用銀行卡的,這個銀行卡就是以後可以和支付寶綁定進行充值和提現的銀行卡。這個銀行卡不想用了,是可以取消和更換銀行卡的。
2. 第二種認證就是普通認證,這種認證不需要銀行卡,但是需要用到身份證信息。 有不知道的請繼續追問。
第一步:登錄,點擊「個人網銀登錄」輸入用戶名、密碼、驗證碼;
第二步:選擇下載「根證書鏈安裝」或者「安全控制項下載」完成後運行安全控制項「kpsignX1.7.0.2.exe」;
第三步:「USB-Key管理工具下載」;
第四步:成功安裝、下載安全控制項和「USB-Key管理工具」。
操作環境:win10,搜狗瀏覽器V15.62.6
富滇卡是富滇銀行向社會大眾發行的,以客戶真實信息開立,具有存取現金、消費支付、轉賬結算、代理繳費等多種功能的銀聯標准借記卡產品。
目前,擁有一卡通、儲蓄卡和個人結算賬戶卡等三大類卡種系列。
現針對富滇銀行社保卡持有人群相對較多,使用率低這一現狀,我司提出改進意見,希望協
助富滇銀行打造統一、鮮明、有高度認知的社保卡產品品牌形象,節省資源獲取更大的成功。此方案,以品牌的經營為導向,以產品的實際利益為誘餌,打動客戶,以實際姿態呼應品牌形象。故提出以下「三步」策略,加大儲蓄、拉動存款、擴大富滇銀行多項金融產品聯動經營。
富滇卡根據「富滇銀行」英文名稱「FUDIAN BANK」首字母「F」進行抽象設計,並從中射出多道光束,寓意新成立的富滇銀行大放異彩。另外,深紅色基調設計效果,既體現富滇銀行悠久而厚重的歷史底蘊,同時也表現了新時代背景下的朝氣蓬勃、突飛猛進和繁榮昌盛!
5. PHP實現通過Luhn演算法校驗信用卡卡號是否有效
本文實例講述了PHP實現通過Luhn演算法校驗信用卡卡號是否有效的方法。分享給大家供大家參考。具體實現方法如下:
$numbers = "49927398716 49927398717 1234567812345678 1234567812345670";
foreach (split(' ', $numbers) as $n)
echo "$n is ", luhnTest($n) ? 'valid' : 'not valid', '</br>';
function luhnTest($num) {
$len = strlen($num);
for ($i = $len-1; $i >= 0; $i--) {
$ord = ord($num[$i]);
if (($len - 1) & $i) {
$sum += $ord;
} else {
$sum += $ord / 5 + (2 * $ord) % 10;
}
}
return $sum % 10 == 0;
}
運行結果
49927398716 is valid
49927398717 is not valid
1234567812345678 is not valid
1234567812345670 is valid
下面是一個更為簡潔的代碼:
復制代碼 代碼如下:
function luhn_test($num) {
$str = '';
foreach( array_reverse( str_split( $num ) ) as $i => $c ) $str .= ($i % 2 ? $c * 2 : $c );
return array_sum( str_split($str) ) % 10 == 0;
}
foreach (array('49927398716','49927398717','1234567812345678','1234567812345670') as $n)
echo "$n is ", luhn_test($n) ? 'valid' : 'not valid', "</br>\n";
輸出結果如下
49927398716 is valid
49927398717 is not valid
1234567812345678 is not valid
1234567812345670 is valid
6. 工行卡開頭這是b還是6
工行儲蓄卡或信用卡卡號均為數字排列,您所描述的工行卡片情況是以數字6開頭。
(作答時間:2019年5月29日,如遇業務變化請以實際為准。)
7. 銀行卡號的組成
你好朋友
綁卡時輸入銀行卡號後識別出銀行和卡種是如何做到的?為什麼能夠在卡號輸入有誤時進行友好提示?本篇文章將為大家揭曉。
一、銀行卡結構
XXXXXX XXXXXXXXXXXX X
發卡行標識代碼 自定義位 校驗碼
根據ISO標准,銀行卡長度一般在13-19位,國際上也有12位的。銀聯標准卡卡長度一般是在16-19位,雙組織卡也有13-19位的。
二、發卡行標識代碼
發卡行標識代碼Bank Identification Number(BIN),又叫發卡機構標識代碼Issuer Identification Numbers(IIN)。一般由6位數字組成,2014年底,國際標准組織(ISO)已經將BIN由6位數字調整到8位數字。目前國內銀聯卡,因銀行眾多,特別是村鎮銀行的存在,BIN長度以6位占絕大部分,另外還存在7、8、9、10等位數卡BIN。
發卡行標識代碼第一位,為發卡行業標識號Major Instry Identifier(MII),代表的是發卡機構所處行業。具體分配規則如下:
目前銀聯標准卡以62開頭,各銀行再向銀聯進行卡BIN申請,如622848開頭的卡為農行借記卡。我們發現,銀聯卡不都是以62開頭,主要有2種情況。第一種是雙組織卡,如銀聯、運通雙組織卡,一般以信用卡居多,如招行與運通合作的運通卡。另外一種即早期以9開頭的銀行卡,這些卡都是國內自行分配的,僅限國內使用,無法與國際進行接軌。以下為部分常見卡組織發行的銀行卡起始數字:
銀聯卡,通過卡BIN能獲取到的信息不僅僅是發卡行,還能確定該卡卡種、卡名稱、卡號長度等信息。以下為部分卡BIN信息列舉:
因此,只要能獲取到比較全面的卡BIN數據,就能判斷出銀行卡發卡行及卡種。目前支付寶、微信等大部分主流需要綁卡的應用都是如此實現。
二、自定義位
發卡行自定義位,一般在6-12位。
三、校驗碼演算法
校驗碼為銀行卡號最後一位,採用LUHN演算法,亦稱模10演算法。計算方法如下:
第一步:從右邊第1個數字開始每隔一位乘以2;
第二步: 把在第一步中獲得的乘積的各位數字相加,然後再與原號碼中未乘2的各位數字相加;
第三步:對於第二步求和值中個位數求10的補數,如果個位數為0則該校驗碼為0。
舉例:6259 6508 7177 209(不含校驗碼的銀行卡號)
第一步:6*2=12,5*2=10,6*2=12,0*2=0,7*2=14,7*2=14,2*2=4,9*2=18
第二步:1+2 + 1+0 + 1+2 + 0 + 1+4 + 1+4 + 4 + 1+8 = 30
30 + 2+9+5+8+1+7+0 = 62
第三步:10-2=8
所以,校驗碼是8,完整的卡號應該是6259650871772098。
值得指出的是,目前銀聯卡幾乎都支持校驗碼演算法,但是也不排除極個別不支持此演算法的,如杭州銀行早期發行的西湖卡。
望採納祝你好運
8. 寫一個oracle函數實現Luhn (模數10) 演算法:傳入一個數字類型字元串,對其進行Luhn校驗生成校驗位。
用以下函數實現
CREATE OR REPLACE FUNCTION generate_luhn (togen IN varchar)
RETURN number
IS
curval NUMBER := 0;
total NUMBER := 0;
everyother NUMBER := 1;
BEGIN
IF(
togen IS NULL
) then
RETURN 0;
end IF;
FOR i IN reverse 1 .. LENGTH(togen) loop
curval:=SUBSTR(togen, i, 1);
IF everyother = 1 then
everyother := 0;
curval := curval * 2;
IF(curval> 9) then
curval:=curval-9;
end IF;
else
everyother := 1;
end IF;
total := total + curval;
end loop;
IF MOD(total, 10) = 0 THEN
RETURN 0;
ELSE
RETURN 10 - MOD(total, 10);
END IF;
END generate_luhn;
/