演算法學習之路|檢驗身份證
一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下:
首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然後將計算的和對11取模得到值Z;最後按照以下關係對應Z值與校驗碼M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
現在給定一些身份證號碼,請你驗證校驗碼的有效性,並輸出有問題的號碼。
輸入格式:
輸入第一行給出正整數N(<= 100)是輸入的身份證號碼的個數。隨後N行,每行給出1個18位身份證號碼。
輸出格式:
按照輸入的順序每行輸出1個有問題的身份證號碼。這裡並不檢驗前17位是否合理,只檢查前17位是否全為數字且最後1位校驗碼計算準確。如果所有號碼都正常,則輸出“All passed”。
輸入樣例1:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
輸出樣例1:
12010X198901011234
110108196711301866
37070419881216001X
輸入樣例2:
2
320124198808240056
110108196711301862
輸出樣例2:
All passed
解題思路:
寫一個函式根據題意判斷此身份證可否通過,並將不可以通過的存入向量。
如果向量大小為0,說明全部通過,否則,依次輸出有問題的。
注意:
這裡的權重是單位1的意思,舉個例子:原本的2,權重為3時,總值為2個3,即2*3==6。
#include<iostream>
#include<vector>
using namespace std;
int quan[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char m[11]={`1` ,`0` ,`X` ,`9` ,`8` ,`7` ,`6` ,`5` ,`4` ,`3` ,`2`};
bool charm(string a,char z){
int sum=0;
for(int i=0;i<17;i++){
if(a[i]>=`0`&&a[i]<=`9`){
sum+=(a[i]-`0`)*quan[i];
}
else
return 0;
}
sum=sum%11;
if(m[sum]==z)
return 1;
else
return 0;
}
int main(){
vector<string>v;
int n;
cin>>n;
for(int i=0;i<n;i++){
string tmp;
cin>>tmp;
if(charm(tmp, tmp[tmp.size()-1])==0)
v.push_back(tmp);
}
if(v.size()==0)
cout<<"All passed";
else{
for(int i=0;i<v.size();i++)
cout<<v[i]<<endl;
}
}
相關文章
- 身份證號碼驗證演算法演算法
- 18位身份證校驗演算法演算法
- node學習---jwt實現驗證使用者身份JWT
- javascript 驗證身份證JavaScript
- 學習身份證影象識別
- WEB身份驗證Web
- 身份證驗證工具類
- 直播app原始碼,進行身份驗證時,檢測身份證位數夠不夠APP原始碼
- 身份證字串檢查字串
- Oracle的身份驗證Oracle
- PHP 驗證身份證號碼PHP
- 中國身份證號驗證庫
- C++身份證號驗證C++
- C#驗證身份證號C#
- 網站漏洞檢測 身份驗證碼與重要操作驗證碼安全問題網站
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- 作業系統身份驗證和口令檔案身份驗證總結作業系統
- js正則驗證身份證號JS
- PHP 身份證精確匹配驗證PHP
- 身份證號碼驗證系統
- 身份證號碼之js驗證JS
- oracle常見身份驗證Oracle
- 新舊身份證合法性驗證及相互轉換演算法演算法
- 演算法學習之路|划拳演算法
- 15位身份證補全為18位身份證演算法演算法
- 資料庫學習:查詢新身份證(18位)的校驗位(轉)資料庫
- js實現身份證號碼驗證JS
- JS驗證身份證的合法性JS
- jQuery正則驗證15/18身份證jQuery
- 身份證檢驗規則擴充套件 laravel-id-card-number套件Laravel
- asp.core 同時相容JWT身份驗證和Cookies 身份驗證兩種模式JWTCookie模式
- 全面學習MySQL中的檢視(1) 檢視安全驗證的方式MySql
- javascript身份證號碼校驗JavaScript
- 使用java完成ldap身份驗證JavaLDA
- C# Web Service 身份驗證C#Web
- 7-3 查驗身份證
- 演算法學習之路|A除以B演算法
- 演算法學習之路|列印排名演算法