標題:
第六十四題:身分證認證 確認一組身分證號碼是否合法??
[打印本頁]
作者:
stephen
時間:
2010-3-27 10:47
標題:
第六十四題:身分證認證 確認一組身分證號碼是否合法??
第六十四題:身分證認證【壹】【貳】 確認一組身分證號碼是否合法??
身分證公式 :
http://my.so-net.net.tw/idealist/Other/SSN.html
作者:
b1081081
時間:
2010-3-27 22:06
老師,如果你有每天來檢查的話,請幫幫我批改一下唄>ˇ<
#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
int main(void){
string num;
int id_change[26] = {10,11,12,13,14,15,16,17,34,18,19,20,
21,22,35,23,24,25,26,27,28,29,32,30,31,33};
int all[8] = {0,0,0,0,0,0,0,0};
int end_all = 0;
int first = 0;
cout << "請輸入身分證號碼" << endl;
cin >> num;
if((int)num[0] >= 97 && (int)num[0] <= 122){
(int)num[0]-32;
}
first = ((id_change[(int)(num[0]-65)] % 10) * 9) +
(((id_change[(int)(num[0]-65)]) - (id_change[(int)(num[0]-65)] % 10)) / 10);
all[7] = ((int)num[8] - 48);
all[6] = ((int)num[7] - 48)* 2;
all[5] = ((int)num[6] - 48)* 3;
all[4] = ((int)num[5] - 48)* 4;
all[3] = ((int)num[4] - 48)* 5;
all[2] = ((int)num[3] - 48)* 6;
all[1] = ((int)num[2] - 48)* 7;
all[0] = ((int)num[1] - 48)* 8;
end_all = (first + all[7] + all[6] + all[5] + all[4] +
all[3] + all[2] + all[1] + all[0]) % 10;
if(end_all == 0){
end_all = 0;
}else{
end_all = 10 - ((first + all[7] + all[6] + all[5] + all[4] +
all[3] + all[2] + all[1] + all[0]) % 10);
}
if(end_all == (int)num[9] - 48){
cout << "這是合法的身分證號碼" << endl;
}else{
cout << "這不是合法的身分證號碼" << endl;
}
system("pause");
return 0;
}
複製代碼
作者:
chuangjoy
時間:
2010-4-2 20:17
回復
2#
b1081081
看了好累喔~~我快掛了...........
因為我真的看不懂...........
作者:
p17johnny
時間:
2010-4-24 10:45
大概用好了```
作者:
b1081081
時間:
2010-4-24 10:46
老師 這是身分證製造器 我自己寫的 看一下唄
#include <iostream>
#include <cstdlib>
using namespace std;
int main(void){
srand(time(NULL));
int id_change[26] = {10,11,12,13,14,15,16,17,34,18,19,20,
21,22,35,23,24,25,26,27,28,29,32,30,31,33};
int id[10];
int where;
int sex;
cout << "請選擇居住地區: 1:台北市 2:台中市 3:基隆市 4:台南市 5:高雄市" << endl;
cout << "6:台北縣 7:宜蘭縣 8:桃園縣 9:嘉義市 10:新竹縣 11:苗栗縣" << endl;
cout << "12:台中縣 13:南投縣 14:彰化縣 15:新竹市 16:雲林縣 17:嘉義縣" << endl;
cout << "18:台南縣 19:高雄縣 20:屏東縣 21:花蓮縣 22:台東縣 23:金門縣" << endl;
cout << "24:澎湖縣 25:陽明山 26:連江縣" << endl;
cin >> where;
id[0] = (where + 64);
cout << "請輸入性別: 1:男性 2:女性" << endl;
cin >> sex;
id[1] = sex;
test:
int all[8] = {0,0,0,0,0,0,0,0};
int end_all = 0;
int first = 0;
int again = 0;
for(int i = 2; i < 10; i++){
id[i] = (rand()%10);
}
first = ((id_change[(id[0]-65)] % 10) * 9) +
(((id_change[(id[0]-65)]) - (id_change[(id[0]-65)] % 10)) / 10);
all[7] = id[8];
all[6] = (id[7] * 2);
all[5] = (id[6] * 3);
all[4] = (id[5] * 4);
all[3] = (id[4] * 5);
all[2] = (id[3] * 6);
all[1] = (id[2] * 7);
all[0] = (id[1] * 8);
end_all = (first + all[7] + all[6] + all[5] + all[4] +
all[3] + all[2] + all[1] + all[0]) % 10;
if(end_all == 0){
end_all = 0;
}else{
end_all = 10 - ((first + all[7] + all[6] + all[5] + all[4] +
all[3] + all[2] + all[1] + all[0]) % 10);
}
if(end_all == id[9]){
cout << (char)id[0] << id[1];
cout << id[2] << id[3] << id[4] << id[5]<< id[6] << id[7] << id[8] << id[9] << endl;
cout << "還要再產生一組身分證嗎? 1:Yes 2:No" << endl;
cin >> again;
if(again == 1){
goto test;
}else if(again == 2){
cout << "再見!!" << endl;
}
}else{
goto test;
}
system("pause");
return 0;
}
複製代碼
作者:
chuangjoy
時間:
2010-4-27 20:49
回復
5#
b1081081
反正只要能執行就好了唄~~
作者:
johnsom127
時間:
2010-8-19 15:10
本帖最後由 johnsom127 於 2010-8-24 15:19 編輯
版權所有 請勿翻印
翻印者須負法律責任
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
int main(void){
char town;
int sex;
int check[26] = { 10, 11, 12, 13, 14, 15, 16, 17, 34, 18, 19, 20, 21,
22, 35, 23, 24, 25, 26, 27, 28, 29, 32, 30, 31, 33};
while(cout <<"請輸入居住城市代碼 : "<<endl
<<"A台北市 J新竹縣 S高雄縣 B台中市 K苗栗縣 T屏東縣 C基隆市 L台中縣 U花蓮縣"<<endl
<<"D台南市 M南投縣 V台東縣 E高雄市 N彰化縣 W金門縣 F台北縣 O新竹市 X澎湖縣"<<endl
<<"G宜蘭縣 P雲林縣 Y陽明山 H桃園縣 Q嘉義縣 Z連江縣 I嘉義市 R台南縣"<<endl){
string id;
srand(time(NULL)); // 下亂數種子
cin >>town;
if(town >=97 &&town <=122){
id +=town-32;
}else if(town >=65 &&town <=90){
id +=town;
}else{
for(int i=0;i<1001;i++){
cout<<"恭喜你中獎了!!";
}
cout<<"請重新輸入";
}
cout <<"請輸入性別 : (1:男 2:女)";
cin >> sex;
if(sex ==1){
id +='1';
}else if(sex ==2){
id +='1';
}else{
for(int i=0;i<1001;i++){
cout<<"恭喜你中獎了!!";
}
cout<<"請重新輸入";
}
for (int i = 1; i <= 7; i++){
id += (char)((rand()*15217%10)+48);
}
cout <<id
<<10-((check[id[0]-64]/10 + check[id[0]-64]%10*9 + (id[2]-48)*8+
+ (id[3]-48)*7+ (id[4]-48)*6+ (id[5]-48)*5
+ (id[6]-48)*4+ (id[7]-48)*3+ (id[8]-48)*2+ (id[9]-48))%10)
+(((check[id[0]-64]/10 + check[id[0]-64]%10*9 + (id[2]-48)*8+
+ (id[3]-48)*7+ (id[4]-48)*6+ (id[5]-48)*5
+ (id[6]-48)*4+ (id[7]-48)*3+ (id[8]-48)*2+ (id[9]-48))%10) ==0)*(-10)
<<endl<<"___________________________________________________________"<<endl;
}
system("pause");
return 0;
}
複製代碼
作者:
Alen
時間:
2010-8-20 11:42
/* a020: 身分證檢驗 */
#include <iostream>
#include <cstdlib>
using namespace std;
int main(void){
string id; // 取得使用者輸入字串
int code[10]; //存放加權後各組數字
int total; // 存放加權數字總合
int user; // 將字母轉換成地區代碼
int num; // 存放驗證碼
int check[26] = { 10, 11, 12, 13, 14, 15, 16, 17, 34, 18, 19, 20, 21,
22, 35, 23, 24, 25, 26, 27, 28, 29, 32, 30, 31, 33};
while (cin >> id){
total = 0;//將 total 初始化
num = 0;//將 num 初始化
if (id[0] >= 65 && id[0] <= 90){ //大寫
user = id[0]-65; //取得陣列位置
}else if(id[0] >= 97 && id[0] <= 122){ //小寫
user = id[0]-97; //取得陣列位置
}
/*開始求權數(字母部分)*/
code[0] = check[user] / 10 * 1;
code[1] = check[user] % 10 * 9;
/* 開始求權數(整數部份) */
/*code[2] = (id[1]-48) * 8;
code[3] = (id[2]-48) * 7;
code[4] = (id[3]-48) * 6;
code[5] = (id[4]-48) * 5;
code[6] = (id[5]-48) * 4;
code[7] = (id[6]-48) * 3;
code[8] = (id[7]-48) * 2;
code[9] = (id[8]-48) * 1;*/
for (int i = 1; i <=8; i++){
code[i+1] = (id[i]-48) * (9-i);
}
/* 將權數相加存入 total */
for (int i = 0; i < 10; i++){
total += code[i];
}
/*檢查流水號是否等於驗證碼*/
num = 10 - (total % 10);
if (num == (id[9]-48)){
cout << "real" << endl;
}else{
cout << "fake" << endl;
}
}
//system("pause");
return 0;
}
複製代碼
歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/)
Powered by Discuz! 7.2