<font color=blue size=4><b><pre>
     1	//idc.cpp -- @CopyLeft by tsaiwn@csie.nctu.edu.tw
     2	//g++ idc.cpp
     3	#include &lt;iostream>
     4	using namespace std;
     5	#include &lt;ctype.h>
     6	int checkID(char *p);
     7	main()    /*** Last upDate: Mon, 1 Feb 1999 ***/
     8	{ 
     9	  char what[][70]={ "!!oOXkҦr", //T0
    10	                    "..Ĥ@ӦrOr",   //T1
    11	                    "AOĤTʶ?",              //T2
    12	                    "ӵuF! X!!",         //T3
    13	                    "|ohX!!",         //T4
    14	                    "!!ӬOƦr!!",     //T5
    15	                    "ƦrXӬO"};      //T6
    16	  cout &lt;&lt; "*********************************" &lt;&lt; endl;
    17	  cout &lt;&lt; "*********ҵ{**********" &lt;&lt; endl;
    18	  cout &lt;&lt; "*********************************" &lt;&lt; endl;
    19	  char id[16];
    20	  while(38==38){
    21	        cout &lt;&lt; "пJҸX : ";
    22	        cin.getline(id, sizeof(id));   // getline ڤ| NewLine!
    23	        if (cin.fail()) {
    24	                if (cin.eof())  {    //EOF encounted?
    25	                        cout &lt;&lt; endl;   // print NewLine
    26	                        break;   // leave the while Loop
    27	                }// if EOF
    28	                cin.clear();  // clear Error Status
    29	                cin.ignore(0xffff, '\n'); //drop till '\n',̦h65535 chars
    30	                cout &lt;&lt; "JrӪI\n";
    31	                continue;  // go back to while
    32	        }// if cin.fail
    33	        // got an ID in char id[ ] , starting check the ID
    34	        if (id[1] == 'U' || id[1] == 'u') break;  // qUit ?
    35	        if (id[0] == '.' &amp;&amp; id[1] == 0) {   // first char is dot(.)
    36	                break;
    37	        }
    38	        cout &lt;&lt; "*********J '.' ***********" &lt;&lt; endl;            
    39	        cout &lt;&lt; "====>" &lt;&lt; what[checkID(id)] &lt;&lt; endl ;
    40	  }   //XT
    41	  cout &lt;&lt; "***********bye! bye!************" &lt;&lt; endl;
    42	  return 0;   // main should return 0 to indicate there is no error
    43	}  // main(
    44	int checkID(char *p) {
    45	     char y[26]={ 10,11,12,13,14,15,16,17, 34,  //ABCDEFGH I
    46	                  18,19,20,21,22, 35,           //JKLMN O
    47	                  23,24,25,26,27,28,            //PQRSTU
    48	                  29,32,30,31, 33 };            //VWXYZ 
    49	     int sum = 0;       //sumOFp⨭ҬO_Tܼ
    50	     if  (isalpha(p[0])) {
    51	         char ktmp= toupper( p[0] ); // see "man isalpha", nΨ &lt;ctype.h> 
    52	         ktmp= y[ ktmp - 'A' ];      // ର table y[] ƭ, s^ ktmp
    53	         sum += (ktmp / 10) + 9* ( ktmp % 10 ); // `N int/int o
    54	          // sum  ktmp/10 Ƴ[W9HktmpH10l
    55	     } else {
    56	         return 1;   //YĤ@Xp[0]Ҥ^.ܿJ~;Ǧ^~X 1
    57	     }//if..else..
    58	     if (p[1] != '1' &amp;&amp; p[1] != '2')  return 2; 
    59	     //ҲĤGXʧOX: 1k.2k, YOhǦ^~X2
    60	        int j;  //UӪ9XҸXMOƦr
    61	                // NѤUXOH8.7.6.5.4.3.2.1
    62	        for (j = 1;j &lt; 9; j++) {
    63	            if (p[j] == 0) return 3;   //X{ NULL, XǦ^~X5
    64	            if (isdigit(p[j]))  sum += (p[j]-'0') * (9-j) ; 
    65	            else  return 5;   // found non_digit
    66	        }//for
    67	        if(!isdigit(p[9])) return 5; // OѤF̫@X]OƦr
    68	        sum += p[9]-'0';   // ̫@X(ˬdX) 񭫤]O 1
    69	        if (p[10] != 0) return 4; // 11XNULL_hǦ^~X 4=Ӫ
    70	        if ( (sum %10) != 0) return 6;    //Y[vMO0, Ǧ^~X6 
    71	        return 0;
    72	 }// checkID(
