[問題] 寫身分證字號認證程式時遇到的問題

看板C_and_CPP作者 (小七)時間14年前 (2010/03/29 15:49), 編輯推噓5(5037)
留言42則, 6人參與, 最新討論串1/1
先附上自己寫的code: http://paste.plurk.com/show/217683/ 檢查過整個code了,不過問題卡在這幾行: j = character - (character % 10) ; z = j % 10; count = z; count = (character%10)*9 + count; 因為輸入自己的身分證字號進去之後,跑出來是錯的(而且是檢查碼錯誤) 所以就用手算了一下這四行的計算過程,結論是式子沒寫錯 用printf試了一下,結果不知道為什麼跑出來的數字是錯的= =|||b 我還是個新手,也許有些地方沒有注意到也說不定 還請版友們幫忙指教一下>"< 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.219.129

03/29 15:59, , 1F
z = j % 10; 改成 z = j / 10 ; 試試
03/29 15:59, 1F

03/29 16:11, , 2F
成功了!! 請問是差在哪裡呢?
03/29 16:11, 2F

03/29 16:14, , 3F
一個是除法(取商)一個是(除法)取餘數....
03/29 16:14, 3F

03/29 16:14, , 4F
還有我剛剛在試的時候發現了另外一個問題,我打進我自己的
03/29 16:14, 4F

03/29 16:15, , 5F
身分證字號是沒錯的,但是打我父母的都顯示位數錯誤....Y
03/29 16:15, 5F

03/29 16:15, , 6F
可是我確定沒有漏打@@
03/29 16:15, 6F

03/29 16:16, , 7F
to V大,我知道這個差別,可是身分證的驗證不就是用餘數檢查
03/29 16:16, 7F

03/29 16:16, , 8F
嗎....@@?
03/29 16:16, 8F

03/29 16:16, , 9F
何不順便學著開始用debugger?? 先練習逐行trace code加
03/29 16:16, 9F

03/29 16:16, , 10F
watch監看可能相關的變數變化....:)
03/29 16:16, 10F

03/29 16:17, , 11F
我沒有查身份證驗證碼的公式, 但是1F推的就OK, 代表你對
03/29 16:17, 11F

03/29 16:17, , 12F

03/29 16:17, , 13F
公式理解有誤(或者其他部份實作有錯, 只是本例應該是前
03/29 16:17, 13F

03/29 16:18, , 14F
>>5 你爸媽的身份證字號裡一定有 0 :D
03/29 16:18, 14F

03/29 16:18, , 15F
哎呀不小心插隊了 (飄走)
03/29 16:18, 15F

03/29 16:18, , 16F
者)....@_@"
03/29 16:18, 16F

03/29 16:18, , 17F
j大網址太長了沒貼滿啦XD
03/29 16:18, 17F

03/29 16:19, , 18F

03/29 16:19, , 19F
少了一個 1 XD
03/29 16:19, 19F

03/29 16:19, , 20F
哈哈~~我懂L大推的意思了....XD
03/29 16:19, 20F

03/29 16:19, , 21F
真的有零......所以是因為這樣後面的數字都沒讀到嗎?
03/29 16:19, 21F

03/29 16:20, , 22F
謝謝j大的連結,我會好好看的:)
03/29 16:20, 22F

03/29 16:20, , 23F
你可能要了解一下 0(數值0, 非'0')在char string裡的意
03/29 16:20, 23F

03/29 16:21, , 24F
思, 與它和strlen()這個函數之間的關係....@_@"
03/29 16:21, 24F

03/29 16:22, , 25F
嗯嗯好的,我再去查書看看:) 謝謝大家:)
03/29 16:22, 25F

03/29 16:23, , 26F
對了j大, Shift+F11, 右鍵->Run To Cursor與Set Next
03/29 16:23, 26F

03/29 16:23, , 27F
Statement也是好物喔XD
03/29 16:23, 27F

03/29 16:24, , 28F
喔喔喔我知道 不過就懶得寫出來了 XD
03/29 16:24, 28F

03/29 16:27, , 29F
話說小弟我還老是用break point當書籤用....XD
03/29 16:27, 29F

03/29 16:28, , 30F
j大的網址內容很實用,不過請愛用縮網址喔XD
03/29 16:28, 30F

03/29 16:36, , 31F
因為我本來以為網址長度剛剛好的...XD
03/29 16:36, 31F

03/29 16:53, , 32F
我剛去看了書之後還是不太了解有0時的問題....Orz
03/29 16:53, 32F

03/29 17:10, , 33F
1. char string如何記錄字串結束(strlen如何判斷長度)
03/29 17:10, 33F

03/29 17:12, , 34F
2. char, ASCII, 和你程式裡65或72這些數的關係是....
03/29 17:12, 34F

03/29 17:14, , 35F
3. 承2. id[i]=id[i]-'0'; 在做什麼/會發生什麼事....
03/29 17:14, 35F

03/29 20:26, , 36F
不太懂樓上的意思@@
03/29 20:26, 36F

03/29 20:28, , 37F
原PO的id[i]=id[i]-'0'是不是打算換成純數字陣列?
03/29 20:28, 37F

03/29 20:29, , 38F
(感覺說明的怪怪的)
03/29 20:29, 38F

03/29 20:33, , 39F
那個是拿來把ascii轉換成對應的數字用的
03/29 20:33, 39F

03/29 20:34, , 40F
我懂V大的意思了,因為我把strlen放在id[i]=id[i]-'0'之後
03/29 20:34, 40F

03/29 20:34, , 41F
所以0會被忽略掉,把他放到最外層去就解決了:)
03/29 20:34, 41F

03/29 20:35, , 42F
謝謝大家:))))
03/29 20:35, 42F
文章代碼(AID): #1Bi5kUsD (C_and_CPP)