  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		CPS0204
 
 
  註冊時間: 2014-08-24 文章: 482
 
  第 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 文章: 4252 來自: Taipei,Taiwan
  第 2 樓
  | 
		
			
				 發表於: 星期二 一月 26, 2021 3:04 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				這要需另外開版嗎? _________________ 如果公司有下列困擾:
 
1. 找不到便宜,快速,簡易的 生產排程軟體
 
2. 不知道如何快速排定 採購計劃
 
3. 成本抓不準,自己算比軟體算有用
 
4. 想學習系統規劃,想找系統架構的顧問
 
 
請聯絡我們,也許我們幫得上忙 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		garfield Site Admin
  
  註冊時間: 2003-01-30 文章: 2160
 
  第 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    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				| 只要有規則,就不叫問題 | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |