国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

C語言程序設(shè)計項目化教學(xué)案例分析

2021-05-11 18:43:27秦春娣黃曉偉
中國新通信 2021年4期
關(guān)鍵詞:校驗碼身份證號項目化教學(xué)

秦春娣 黃曉偉

【摘要】 ? ?C語言程序設(shè)計作為高職計算機專業(yè)學(xué)生的基礎(chǔ)語言,在整個課程中的相當重要的。學(xué)習(xí)C語言程序設(shè)計不僅能讓學(xué)生了解基本的程序設(shè)計概念,還能讓學(xué)生學(xué)會使用編程語言的代碼結(jié)構(gòu),更能讓學(xué)生學(xué)會編程的思想。為后續(xù)學(xué)習(xí)其他語言:如JAVA、Python等語言打下扎實的基礎(chǔ)。傳統(tǒng)的C語言學(xué)習(xí)都是通過語法學(xué)習(xí),加上小的案例來講解的,缺乏對實際生活中案例的整體框架編程設(shè)計。針對上述情況,下面將通過生活實際案例,應(yīng)用C語言程序設(shè)計判斷身份證號校驗碼項目進行教學(xué)案例分析。

【關(guān)鍵詞】 ? ?身份證號 ? ?校驗碼 ? ?項目化教學(xué)

引言:

C語言從上個世紀70年代誕生至今將近50年,它仍舊活躍在信息技術(shù)的各個領(lǐng)域。在信息技術(shù)發(fā)展日新月異的今天,一項技術(shù)生存了50年仍保青春,不得不說,C語言是一種功能強大,生命力強的程序設(shè)計語言。如此功能強大的結(jié)構(gòu)化的程序設(shè)計語言,有著豐富的數(shù)據(jù)類型,有著基本的語言結(jié)構(gòu),有著順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)的基本技能。傳統(tǒng)的C語言程序設(shè)計教學(xué)是采用小程序設(shè)計為案例的,它如何與面向?qū)ο蟮某绦蛟O(shè)計語言銜接呢?我們的課程采用項目化教學(xué)就非常有必要了。

一、案例背景

在項目化教學(xué)案例的設(shè)計過程中,如果缺少與實際生活相關(guān)的例子,學(xué)生在學(xué)習(xí)過程中就會缺少學(xué)習(xí)的動力。那么老師在設(shè)計“C語言程序設(shè)計”項目化案例時,根據(jù)日常生活實際問題具體情景進行項目設(shè)計。

本案例我們應(yīng)用C語言程序設(shè)計對身份證號校驗碼驗證的項目來分析,通過對18位身份證號碼的組成原理,校驗碼的檢驗真?zhèn)嗡惴皩崿F(xiàn)身份證號校驗碼的項目設(shè)計來講解。

二、身份證號碼有關(guān)知識

2.1身份證號的組成

公民身份證號碼是按照一定的規(guī)則組成的,它由十七位數(shù)字和一位校驗碼構(gòu)成。從左至右一到六位數(shù)字是地址碼,七至十四數(shù)字是出生日期碼,十五至十七數(shù)字是順序碼,最后一位為校驗碼。十八位數(shù)字我們可以用字母來表示:ABCDEFYYYYMMDDXXXR。

1、地址碼(ABCDEF):表示常住戶口所在省、市、區(qū)的行政代碼。比如:340000表示安徽省;340100 表示安徽省合肥市;340101 表示安徽省合肥市市轄區(qū)。

2、出生日期碼(YYYYMMDD):表示該人員的出生年月日,比如:2020年1月11日出生的人員,出生日期碼為:20200111,月份和日期不足兩位的,我們在前面加0,數(shù)字之間是不用分隔符的。

3、順序碼(XXX):表示是對身份證號前六位相同(同一個地區(qū)內(nèi)),又是同年同月同日出生的人員編定的順序碼,奇數(shù)代表是男性,偶數(shù)代表是女性,可以更好的區(qū)別男女。

4、校驗碼(R):根據(jù)前面17位數(shù)字,按照校驗碼計算方法得出一位數(shù)。

2.2校驗碼的計算方式

1、根據(jù)前面17位數(shù)字進行加權(quán)求和:公式:S=Sum(Ai*Wi),i=1至17,其中Ai為第i位置上身份證號碼數(shù)字值,Wi為第i位置上的加權(quán)因子,相應(yīng)的17位加權(quán)因子:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2。

身份證號碼上每一位數(shù)字與相應(yīng)的加權(quán)因子相乘的積相加,計算出總和S。

2、用11對計算結(jié)果取模 Y=mod(S,11) ,S除以11,看得到的余數(shù)。余數(shù)Y有0至10共11個數(shù)字。

3、按照模的值對應(yīng)的校驗碼如下圖:

2.3校驗碼出現(xiàn)‘X

根據(jù)上表的對應(yīng)關(guān)系,我們發(fā)現(xiàn)校驗碼有11個,如果我們用數(shù)字0到9來表示,就缺少一位。用二位數(shù)字來表示的話,身份證號就變成19位了。因為Ⅹ代青羅馬數(shù)字的10,所以這里用X來代替其中一位校驗碼。這樣可以保障公民身份證號符合國家標準。

三、項目設(shè)計

3.1開發(fā)環(huán)境

開發(fā)語言:C語言

開發(fā)工具:Code::Blocks/Dev-C++

3.2項目需求

輸入身份證號碼,以字符串的形式放入字符數(shù)組中,調(diào)用判斷身份證號號碼函數(shù),首先判斷位數(shù)是否為18位,接著判斷除最后一位可以是大寫X或小寫x以外,其他位必須是數(shù)字,滿足以上二個條件后,再來判斷最后一位校驗位是否正確。如果以上條件都能滿足,那么我們就判斷身份證號碼是合法的,否則為不合法。

3.3數(shù)據(jù)類型

本案例中,我們將應(yīng)用到了int char long的數(shù)據(jù)類型,加權(quán)因子采用整型數(shù)組,校驗碼和身份證號碼都采用字符數(shù)組的類型。

3.4涉及的知識點

本程序用到C語言基礎(chǔ)知識,所涉及到的知識點如下:

(1)stdio.h、string.h和ctype.h頭文件的引入;

(2)用戶自定義函數(shù)及函數(shù)的調(diào)用;

(3)數(shù)組的定義和初始化,缺省數(shù)組的大小時,必須初始化數(shù)據(jù),編譯器會自動計算數(shù)據(jù)的大小。如:int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //加權(quán)因子;

(4)調(diào)用字符串長度函數(shù)strlen(),計算字符長度;調(diào)用數(shù)字判斷isdigit()函數(shù);

(5)字符轉(zhuǎn)換為數(shù)值功能,如0-48=0 字符‘0變成數(shù)值0;

(6)gets()可以接受帶有空格的字符,而scanf()函數(shù)遇到空格就截斷,我們要理解兩者之間的區(qū)別;

(7)%,取模運算就是自然數(shù)學(xué)中的求余數(shù),參與取模運算的兩個操作數(shù)都是整型數(shù)。

四、項目編碼

4.1核心算法分析

函數(shù)是完成某個特定功能的模塊代碼。通過調(diào)用模塊代碼完成某項功能。我們定義了一個身份證驗證函數(shù),用來檢測輸入的字符串身份證號碼的有效性。最后一位校驗碼是根據(jù)前面 17 位數(shù)字碼,按照 ISO 7064:1983.MOD 11-2 校驗碼計算出來的校驗碼。

我們采用用戶自定義函數(shù)Chk18PaperId函數(shù)來完成身份證號校驗過程。

在Chk18PaperId函數(shù)中我們首先對字符串身份證碼進行位數(shù)的判斷,如果字符串長度不等于18位,那么我們直接返回,判定該身份證號碼為不合法。在字符串長度為18位的基礎(chǔ)上,我們再來判斷每一位是否是數(shù)字字符或者最后一位是羅馬數(shù)字X,這里為了方便,我們直接用英文字母X來表示。滿足以上兩個條件之后,我們再來判斷最后一位校驗碼是否正確。

假設(shè)某一身份證號前17位:

17位數(shù)字 ?3 2 0 6 2 1 1 9 9 5 0 7 1 8 3 0 2

加權(quán)因子 ?7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

根據(jù)加權(quán)求和公式S = Sum(Ai * Wi),計算17位數(shù)字各位數(shù)字與對應(yīng)的加權(quán)因子的乘積的和S:3×7+2×9+0×10+6×5+2×8+1×4+1×2+9×1+9×6+5×3+0×7+7×9+1×10+8×5+3×8+0×4+2×2=310;

計算S÷11的余數(shù)T:310 % 11=2;余數(shù)0-10對應(yīng)校驗碼為[1, 0, X , 9, 8, 7, 6, 5, 4, 3, 2],

那么該身份證號碼的第18位校驗碼就是X。

4.2完整代碼

#include //輸入輸出函數(shù)scanf()和printf()包含在頭文件里面

#include //字符串長度函數(shù)包含在頭文件里面

#include //字符分類函數(shù)頭文件

int Chk18PaperId (const char *sPaperId) //函數(shù)用來判斷身份證號校驗碼是否合法

{ long lSumQT =0;

int R[] ={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }; //加權(quán)因子

char sChecker[11]={'1','0','X', '9', '8', '7', '6', '5', '4', '3', '2'}; //校驗碼

if( 18 != strlen(sPaperId)) return -1; //檢驗長度

int i=0; ? ? ? ?//校驗數(shù)字

for (i=0; i<18; i++)

{ ? if ( !isdigit(sPaperId[i]) && ?。ǎ?X' == sPaperId[i] || 'x' == sPaperId[i])&& 17 == i) )

{ ?return -1;//如果身份證號碼中某一位不是數(shù)字或者X 的話,則返回-1,失敗}}

for (i=0; i<=16; i++)//驗證最末的校驗碼

{ ? ?lSumQT += (sPaperId[i]-48) * R[i];}

if (sChecker[lSumQT%11] != sPaperId[17] )

{ return -1;}

return 0; ?}

int main(void)

{ char Personal_ID[18];

printf("請輸入一個身份證號碼:\n");

gets(Personal_ID); ? ? //用戶輸入一個字符串身份證號碼

if(!Chk18PaperId(Personal_ID)) ?printf("合法\n"); ?//調(diào)用自定義校驗碼函數(shù)

else ?printf("不合法\n");

return 0;}

五、結(jié)論

C語言本身提供了強大的算法功能,而且還提供項目實踐功能。我們對C語言程序設(shè)計進行項目化教學(xué),在教學(xué)案例設(shè)計中根據(jù)高職學(xué)生學(xué)習(xí)的特點,設(shè)計出符合學(xué)生的C語言項目教學(xué)案例,從而提高學(xué)生學(xué)習(xí)C語言解決各種實際問題的能力。

參 ?考 ?文 ?獻

[1]許芝卉,李建華.關(guān)于C語言程序設(shè)計題自動評分算法的探究,山西大同大學(xué)報,2020(10).

[2]唐小健.探究C語言程序設(shè)計在項目實踐中的技巧應(yīng)用,電腦編程技術(shù)與維護,2020(11).

[3]周軍強.C 語言程序設(shè)計課程項目化教學(xué)研究,福建電腦,2020(04).

[4]俞騁.項目教學(xué)法在技校C語言教學(xué)中的實證研究,現(xiàn)代計算機,2019(14).

[5]林劍.C語言程序設(shè)計課程教學(xué)探索,課程教育研究,2019(02).

秦春娣(1981-),女,江蘇常州人,實驗師,工程師,本科,主要研究方向為計算機應(yīng)用;

黃曉偉(1981-),男,江蘇常州人,副教授,研究方向:工業(yè)自動化控制。

猜你喜歡
校驗碼身份證號項目化教學(xué)
老師情
作品賞析(3)
高職《管理學(xué)》課程實行項目化教學(xué)改革與實踐策略
芻議項目化教學(xué)法在本科動漫實訓(xùn)課程中的探索與應(yīng)用
眾籌模式引入工業(yè)產(chǎn)品設(shè)計項目化教學(xué)的思考與探索
《UG NX機械產(chǎn)品設(shè)計》課程項目化教學(xué)的改革研究
科技視界(2016年18期)2016-11-03 21:50:03
基于Excel實現(xiàn)書號校驗碼的驗證
基于FPGA的循環(huán)冗余校驗碼設(shè)計
電子世界(2015年14期)2015-11-07 05:32:29
身份證號碼中的數(shù)學(xué)
《網(wǎng)印工業(yè)》關(guān)于作者投稿同時提供身份證號的通知
庐江县| 平邑县| 盐山县| 龙山县| 天峨县| 昌邑市| 绩溪县| 梅河口市| 潍坊市| 房产| 荔波县| 潼关县| 黄梅县| 稷山县| 沙坪坝区| 六安市| 石门县| 桑日县| 同德县| 塔河县| 黎川县| 南阳市| 渑池县| 彝良县| 陵水| 玛多县| 尼木县| 丹巴县| 利川市| 开原市| 东城区| 区。| 潍坊市| 正宁县| 慈利县| 大姚县| 永和县| 锦州市| 云霄县| 怀集县| 麻城市|