|
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
CPS0204
註冊時間: 2014-08-24 文章: 451
第 1 樓
|
發表於: 星期二 一月 26, 2021 2:14 pm 文章主題: 公司統編8碼的判斷 |
|
|
無意中看到此php程式,大家可改良他
第7碼為7時,好像需重判斷!
<script>
//供驗證公司統編正確
function ValidateTaxID(sTaxID)
{
try
{
var i;
var a1;
var a2;
var a3;
var a4;
var a5;
var b1;
var b2;
var b3;
var b4;
var b5;
var c1;
var c2;
var c3;
var c4;
var d1;
var d2;
var d3;
var d4;
var d5;
var d6;
var d7;
var cd8;
if(sTaxID.length != 數字八) return false;
var c;
for (i = 0; i < 8; i++)
{
c = sTaxID.charAt(i);
if ("0123456789".indexOf(c) == -1) return false;
}
d1 = parseInt(sTaxID.charAt(0));
d2 = parseInt(sTaxID.charAt(1));
d3 = parseInt(sTaxID.charAt(2));
d4 = parseInt(sTaxID.charAt(3));
d5 = parseInt(sTaxID.charAt(4));
d6 = parseInt(sTaxID.charAt(5));
d7 = parseInt(sTaxID.charAt(6));
cd8 = parseInt(sTaxID.charAt(7));
c1 = d1;
c2 = d3;
c3 = d5;
c4 = cd8;
a1 = parseInt((d2 * 2) / 10);
b1 = (d2 * 2) % 10;
a2 = parseInt((d4 * 2) / 10);
b2 = (d4 * 2) % 10;
a3 = parseInt((d6 * 2) / 10);
b3 = (d6 * 2) % 10;
a4 = parseInt((d7 * 4) / 10);
b4 = (d7 * 4) % 10;
a5 = parseInt((a4 + b4) / 10);
b5 = (a4 + b4) % 10;
if((a1 + b1 + c1 + a2 + b2 + c2 + a3 + b3 + c3 + a4 + b4 + c4) % 10 == 0) return true;
if(d7 = 7)
{
if((a1 + b1 + c1 + a2 + b2 + c2 + a3 + b3 + c3 + a5 + c4) % 10 == 0) return true;
}
return false;
}catch(e){
return false;
}
}
</script> |
|
回頂端 |
|
|
syntech
註冊時間: 2003-05-16 文章: 4225 來自: Taipei,Taiwan
第 2 樓
|
發表於: 星期二 一月 26, 2021 3:04 pm 文章主題: |
|
|
這要需另外開版嗎? _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
|
garfield Site Admin
註冊時間: 2003-01-30 文章: 2158
第 3 樓
|
發表於: 星期二 一月 26, 2021 5:32 pm 文章主題: |
|
|
(統編驗證 中文補充)
假設統一編號為 A B C D E F G H
A — G 為編號, H 為檢查碼
A — G 個別乘上特定倍數, 若乘出來的值為二位數則將十位數和個位數相加
A x 1
B x 2
C x 1
D x 2
E x 1
F x 2
G x 4
H x 1
最後將所有數值加總, 被 10 整除就為正確
若上述演算不正確並且 G 為 7 得話, 再加上 1 被 10 整除也為正確 _________________ 利用>>搜尋<<的功能會比問的還要快得到答案. |
|
回頂端 |
|
|
朱育興
註冊時間: 2003-08-25 文章: 661 來自: 台中市大里區
第 4 樓
|
發表於: 星期五 三月 26, 2021 3:06 pm 文章主題: |
|
|
代碼: | * ---------------- *
* 統一編號驗證函數 *
* ---------------- *
FUNCTION CHECK_UNIFORM_NO
* -------------------------------------------------------------------------- *
* 建立日期:2021/03/26
* 修改日期:2021/03/26
* 編碼者:朱育興 YSC5096
* 註:版權沒有;歡迎拷貝使用
* -------------------------------------------------------------------------- *
* 統一編號 (Uniform numbers) 檢核原則:
* (1)碼號內容說明
* 第 1 ~ 7 碼:流水號
* 第 8 碼:檢查碼
* (2)檢查號碼計算規則
* 第 1 ~ 7 碼:
* 每一碼個別乘上特定倍數,若乘出來的值為二位數則將十位數和個位數相ㄐㄧㄚ
* +------+---+---+---+---+---+---+---+---+
* | 碼號 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
* +------+---+---+---+---+---+---+---+---+
* | 乘數 | 1 | 2 | 1 | 2 | 1 | 2 | 4 | 1 |
* +------+---+---+---+---+---+---+---+---+
* 第 8 碼:檢查碼
* 1.將第 1 ~ 8 碼依上述規則ㄐㄧㄚ總,被 10 整除就為正確
* 2.若上述演算不正確並且第 7 碼為 7 的話,再ㄐㄧㄚ上 1 被 10 整除ㄧㄝˇ為正確
* (3)範例說明
* 統一編號 = 22922015 (5為正確之檢查碼)
* 2 2 9 2 2 0 1
* × 1 2 1 2 1 2 4 (乘數)
* ------------------------------------
* 2 4 9 4 2 0 4
*
* 2+4+9+4+2+0+4 = 25
* 檢查碼 = 10 - 5 = 5
* 統一編號 = 22922079 (9 為正確之檢查碼)
* 22922078 (8 ㄧㄝˇ是正確之檢查碼)
* 2 2 9 2 2 0 7
* × 1 2 1 2 1 2 4 (乘數)
* ------------------------------------
* 2 4 9 4 2 0 28
*
* 2+4+9+4+2+0+(2+8) = 31
* 1.檢查碼 = 10-1 = 9
* 2.ㄧㄣ為第 7 碼是 7,所以檢查碼 = 10 - (1+1) = 8 ㄧㄝˇ是正確的
* -------------------------------------------------------------------------- *
* --------------------------------------------------------------------------
* 參數 型態 說明
* ------------------ ---- --------------------------------------------------
* Input:
* LP_cUniformNO C 要驗證的統一編號
* (LP_lNoShowMess) L 1.(可選參數)是否不要顯示錯誤內容
* 2.預ㄕㄜˋ值 = .F. (代表要顯示錯誤內容)
* (LP_lPassMess) L 1.(可選參數)驗證失敗時,是否回傳錯誤內容
* 2.預ㄕㄜˋ值 = .F. (代表要回傳錯誤內容)
* 3.當本參數 = .T. 時,LP_lNoShowMess 會強迫等於 .T.
* Output:
* Wo_lCHKOK L 是否驗證通過。回傳 .T. 或 .F.
* 或 Wo_cMess C 錯誤內容
* --------------------------------------------------------------------------
LPARAMETERS LP_cUniformNO, LP_lNoShowMess, LP_lPassMess
LOCAL Wo_lCHKOK, Wo_cMess
Wo_lCHKOK = .T.
Wo_cMess = ""
* -------- *
* 參數檢查 *
* -------- *
IF TYPE("LP_lNoShowMess") <> "L"
LP_lNoShowMess = .F.
ENDIF
IF TYPE("LP_lPassMess") <> "L"
LP_lPassMess = .F.
ENDIF
* > 當驗證失敗時、選擇要回傳錯誤內容時,強制不呼叫 [訊息方塊]
IF LP_lPassMess = .T.
LP_lNoShowMess = .T.
ENDIF
* ------------ *
* 區域變數宣告 *
* ------------ *
LOCAL W1_cUniformNO,; && C 統一編號
W1_nSUB_A,; && N FOR ... ENDFOR 迴圈駐標
W1_nSUM,; && N ㄐㄧㄚ總
W1_nNumericalValue,; && N 計算數值
W1_nINT,; && N INT 函數計算值
W1_nMOD && N MOD 函數計算值
LOCAL ARRAY W1_aUniformNO[8],; && A 將 8 位的統一編號拆到 8 個ㄓㄣˋ列元素中
W1_aFactor[8] && A 用來驗證統一編號的乘數ㄧㄣ子
W1_cUniformNO = ALLTRIM(LP_cUniformNO)
* -------------- *
* 將統一編號拆解 *
* -------------- *
STORE SPACE(01) TO W1_aUniformNO
FOR W1_nSUB_A = 1 TO ALEN(W1_aUniformNO, 1)
W1_aUniformNO[W1_nSUB_A] = SUBSTR(W1_cUniformNO, W1_nSUB_A, 1)
ENDFOR
DO CASE
CASE EMPTY(W1_cUniformNO)
* 不驗證
RETURN Wo_lCHKOK
CASE LEN(W1_cUniformNO) <> 8
Wo_cMess = "統一編號的長度應為 8 個數字"
OTHERWISE
FOR W1_nSUB_A = 1 TO ALEN(W1_aUniformNO, 1)
IF !ISDIGIT(W1_aUniformNO[W1_nSUB_A])
Wo_cMess = "統一編號必須是阿拉伯數字"
EXIT
ENDIF
ENDFOR
ENDCASE
* ---- *
* 驗證 *
* ---- *
IF EMPTY(Wo_cMess)
* > 乘數ㄧㄣ子
W1_aFactor[1] = 1
W1_aFactor[2] = 2
W1_aFactor[3] = 1
W1_aFactor[4] = 2
W1_aFactor[5] = 1
W1_aFactor[6] = 2
W1_aFactor[7] = 4
W1_aFactor[8] = 1
* > ㄐㄧㄚ總
W1_nSUM = 0
FOR W1_nSUB_A = 1 TO ALEN(W1_aUniformNO, 1)
W1_nNumericalValue = VAL(W1_aUniformNO[W1_nSUB_A]) * W1_aFactor[W1_nSUB_A]
W1_nINT = INT(W1_nNumericalValue / 10)
W1_nMOD = MOD(W1_nNumericalValue, 10)
W1_nSUM = W1_nSUM + W1_nINT + W1_nMOD
ENDFOR
* > 驗證
DO CASE
CASE W1_aUniformNO[7] == "7"
IF !INLIST(MOD(W1_nSUM, 10), 0, 9)
Wo_cMess = "統一編號檢查號碼不合"
ENDIF
OTHERWISE
IF MOD(W1_nSUM, 10) != 0
Wo_cMess = "統一編號檢查號碼不合"
ENDIF
ENDCASE
ENDIF
* ---- *
* 回傳 *
* ---- *
IF !EMPTY(Wo_cMess)
IF LP_lNoShowMess = .T.
Wo_lCHKOK = .F.
ELSE
IF MESSAGEBOX(Wo_cMess+CHR(13)+CHR(10)+CHR(13)+CHR(10)+"是否強迫輸入?", 4+32+256, PADR("統一編號驗證", 40)) <> 6 && 不是 Yes
Wo_lCHKOK = .F.
ENDIF
ENDIF
IF LP_lPassMess = .T.
IF Wo_lCHKOK = .F.
RETURN Wo_cMess
ENDIF
ENDIF
ENDIF
RETURN Wo_lCHKOK
ENDFUNC |
_________________ 希望有更多人來參與
VFP wiki - 需要大家一起完成的VFP電子書與FAQ |
|
回頂端 |
|
|
lygcw9603
註冊時間: 2011-12-25 文章: 130
第 5 樓
|
發表於: 星期日 三月 28, 2021 2:56 pm 文章主題: |
|
|
只要有規則,就不叫問題 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|