C計算檢查碼的Function轉Delphi問題 |
答題得分者是:jessechan
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
The following file contains the C code for figuring the subscriber access
card’s check digit:
/*******************************************************
*****/
USHORT ND_CheckDigit(ULONG long_id)
{
BYTE dbg[20];
USHORT check;
USHORT subtotal;
USHORT i;
USHORT times;
sprintf(dbg, “ld”, long_id);
check = 0;
times = 1;
for (i=0; i<8; i ) {
subtotal = (dbg[i]-’0’)*times;
subtotal = (subtotal / 10) (subtotal % 10);
check = subtotal;
if (times==1)
times=2;
else
times=1;
}
check = 10 - (check % 10);
if (check == 10)
check = 0;
return(check);
}/* ND CHECK DIGIT */
以上是Function的內容,想問一下幾個不懂的地方
1.sprintf(dbg, “ld”, long_id);這一行是做什麼
2.subtotal = (dbg[i]-’0’)*times;這一行是什麼意思
3.%是求餘數對嗎?
4.check = subtotal;就是check = check subtotal;
以上,敬請指教,謝謝!
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ | ||
jessechan
版主 發表:109 回覆:394 積分:254 註冊:2002-04-05 發送簡訊給我 |
這應該是一個求卡號檢查碼的 funciton,
1.sprintf(dbg, “ld”, long_id);這一行是做什麼
把一個用長整數儲存的卡號轉成字串
2.subtotal = (dbg[i]-’0’)*times;這一行是什麼意思
如果是第 0,2,4,6, 個數字的值乘以 1, 第 1,3,5,7 個數字乘以 2, 以此結果做 checksum
3.%是求餘數對嗎?
yes
4.check = subtotal;就是check = check subtotal;
yes again
Jesse Chan
------
Jesse Chan |
||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 這應該是一個求卡號檢查碼的 funciton, 1.sprintf(dbg, “ld”, long_id);這一行是做什麼 把一個用長整數儲存的卡號轉成字串 2.subtotal = (dbg-’0’)*times;這一行是什麼意思 如果是第 0,2,4,6, 個數字的值乘以 1, 第 1,3,5,7 個數字乘以 2, 以此結果做 checksum 3.%是求餘數對嗎? yes 4.check = subtotal;就是check = check subtotal; yes again [i]Jesse Chan感謝jessechan兄: 果然和我猜的差不多,不過我算出來有問題才上來問,經過檢查就差在如下: subtotal := Round(subtotal / 10) (subtotal mod 10); 原來除完後不可四捨五入,改為以下即可 subtotal := subtotal div 10 (subtotal mod 10); 以上為Delphi語法 再次感謝jessechan兄
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |