  | 
				VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.   
				 | 
			 
		 
		 
	
		| 上一篇主題 :: 下一篇主題   | 
	 
	
	
		| 發表人 | 
		內容 | 
	 
	
		Ruey 訪客
 
 
 
 
 
  第 1 樓
  | 
		
			
				 發表於: 星期三 三月 12, 2003 6:07 pm    文章主題: 統一編號檢查 | 
				     | 
			 
			
				
  | 
			 
			
				/*************************/
 
/*  營利事業統一編號邏輯檢查  */
 
/*************************/
 
/*
 
前言
 
營利事業統一編號邏輯檢查來源為國稅局提供的 BASIC 程式,程式相當精簡,而且利用到 GOTO 語法,
 
但對照其規則時,則不易了解其程式,因此加以改寫如下。對於國稅局提供提供的 BASIC 程式可以參考財
 
政部稅制委員會出版的《營業稅、印花稅、證券交易稅法令彙編》(中華民國八十五年度版)第 508-523 的
 
 <營業人進、銷項媒體申報注意事項> 說明,其中
 
 
  附件六營利事業統一編號邏輯檢查方式為最正式;
 
  附件七營利事業統一編號檢查副程式,是舊 BASIC 語言,利用 Visbal Basic 是無法編譯。
 
 
《營業稅、印花稅、證券交易稅法令彙編》可以在台北三民書局及正中書局購買或者查詢學校圖書館
 
 (假如圖書館是使用中國圖書分類法作為中文圖書分類,其編號落於567.5)
 
程式說明
 
參考資料:吳和珍及許秋雪所編著之《Visual Fox Pro SQL應用專輯》第第3-158,3-159。
 
(一) 長度:共八位,,全部為數字型態。
 
(二) 計算公式
 
1、各數字分別乘以 1,2,1,2,1,2,4,1。
 
2、公式如下:
 
	D1	D2	D3	D4	D5	D6	D7	D8			
 
*	1	2	1	2	1	2	4	1	(第一列 * 第二列)
 
 
 
	A1	B1	A2	B2	A3	B3	A4	B4	(Bx:相乘後的十位數)
 
+		C1		C2		C3	C4		(Cx:相乘後的個位數)
 
 
 
	X1	X2	X3	X4	X5	X6	X7	X8	(Xx:相加後的十位數)
 
							Y7		(Yx:相加後的個位數)
 
    Z1= X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 或
 
    Z1= X1 + X2 + X3 + X4 + X5 + X6 + Y7 + X8
 
 
3、當第 7 位數為 7 者,可取相加之倒數第二位取 0 及 1 來計算如 Z1 及 Z2 計算其和。
 
4、假如 Z1 或 Z2 能被 10 整除,則表示營利事業統一編號正確。
 
(三) 範例  ( 以 0 0 2 3 8 7 7 8 為例 )
 
	0	0	2	3	8	7	7	8			
 
*	1	2	1	2	1	2	4	1	(第一列 * 第二列)
 
 
 
	0	0	2	6	8	1	2	8	(Bx:相乘後的十位數)
 
+						4	8		(Cx:相乘後的個位數)
 
 
 
	0	0	2	6	8	5	1	8	(Xx:相加後的十位數)
 
							0		(Yx:相加後的個位數)
 
   Z1= 0+ 0+ 2+ 6+ 8+ 5+ 1+ 8 = 30 或
 
   Z2= 0+ 0+ 2+ 6+ 8+ 5+ 0+ 8 = 29
 
 因 30 能被 10 整除,故營利事利統一編號正確。
 
*/
 
 
                                                                          
 
           附件七      營利事業統一編號邏輯檢查方法                        
 
           ┌───────┬─────────┬───────────┐  
 
           │項          目│計   算   方  法  │說                  明│  
 
           ├───────┼─────────┼───────────┤  
 
           │統  一  編  號│04595257          │                      │  
 
           │              │                  │                      │  
 
           │邏  輯  乘  數│12121241          │兩數上下對應相乘      │  
 
           │              │                  │                      │  
 
           │乘          積│08515427          │乘積直寫並上下相加    │  
 
           │              │   8  0           │                      │  
 
           │              │                  │                      │  
 
           │乘  積  之  和│08595427          │將相加之和再相加      │  
 
           │              │                  │                      │  
 
           │              │0+8+5+9+4+2+7=40  │                      │  
 
           ├───────┴─────────┴───────────┤  
 
           │      最後結果,40能被10整除,故04595257符合邏輯。        │  
 
           ├───────┬─────────┬───────────┤  
 
           │統  一  編  號│10458575          │倒數號二位為7         │  
 
           │              │                  │                      │  
 
           │邏  輯  乘  數│12121241          │兩數上下對應相乘      │  
 
           │              │                  │                      │  
 
           │乘          積│10418125          │乘積直寫並上下相加    │  
 
           │              │   0 08           │                      │  
 
           │              │                  │                      │  
 
           │乘  積  之  和│10418115          │再相加時最後第二位數取│  
 
           │              │      0           │0 或1 均可。          │  
 
           │              │                  │                      │  
 
           │              │1+0+4+1+8+1+1+5=21│                      │  
 
           │              │1+0+4+1+8+1+0+5=20│                      │  
 
           ├───────┴─────────┴───────────┤  
 
           │      最後結果,20能被10整除,則10458575符合邏輯。        │  
 
           └─────────────────────────────┘ | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		Ruey 訪客
 
 
 
 
 
  第 2 樓
  | 
		
			
				 發表於: 星期三 三月 12, 2003 6:09 pm    文章主題:  | 
				     | 
			 
			
				
  | 
			 
			
				*******************************
 
*   用途:  檢查統一編號是否正確
 
*   參數:
 
*   傳值:
 
*   範例:
 
*   By Ruey
 
*******************************
 
FUNCTION ChkBid
 
	PARAMETERS tcBid
 
	LOCAL lcBid,lnZ1,lnZ2,llD7
 
 
	lcBid=tcBid
 
 
	IF LEN(ALLTRIM(lcBid))=0	&&檢查長度
 
		RETURN .T.
 
	ENDIF
 
 
	IF LEN(ALLTRIM(lcBid))!=8	&&檢查長度
 
		RETURN .F.
 
	ENDIF
 
 
	FOR i=1 TO 8		&&檢查是否數字
 
		IF SUBSTR(lcBid,i,1)<"0" OR SUBSTR(lcBid,i,1)>"9"
 
			RETURN .F.
 
		ENDIF
 
	ENDFOR
 
 
	lnAx1=VAL(SUBSTR(lcBid,1,1))*1
 
	lnAx2=VAL(SUBSTR(lcBid,2,1))*2
 
	lnAx3=VAL(SUBSTR(lcBid,3,1))*1
 
	lnAx4=VAL(SUBSTR(lcBid,4,1))*2
 
	lnAx5=VAL(SUBSTR(lcBid,5,1))*1
 
	lnAx6=VAL(SUBSTR(lcBid,6,1))*2
 
	lnAx7=VAL(SUBSTR(lcBid,7,1))*4
 
	lnAx8=VAL(SUBSTR(lcBid,8,1))*1
 
 
 
	lnZ1=0
 
	lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx1,2),1,1))+VAL(SUBSTR(STR(lnAx1,2),2,1))
 
	lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx2,2),1,1))+VAL(SUBSTR(STR(lnAx2,2),2,1))
 
	lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx3,2),1,1))+VAL(SUBSTR(STR(lnAx3,2),2,1))
 
	lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx4,2),1,1))+VAL(SUBSTR(STR(lnAx4,2),2,1))
 
	lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx5,2),1,1))+VAL(SUBSTR(STR(lnAx5,2),2,1))
 
	lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx6,2),1,1))+VAL(SUBSTR(STR(lnAx6,2),2,1))
 
	lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx8,2),1,1))+VAL(SUBSTR(STR(lnAx8,2),2,1))
 
	IF SUBSTR(lcBid,7,1)="7"	&&當第 7 位數為 7 者,可取相加之倒數第二位取 0 及 1 來計算如 Z1 及 Z2 計算其和
 
		lnZ1=lnZ1+0
 
		lnZ2=lnZ1+1
 
 
		IF MOD(lnZ1,10)=0
 
			RETURN .T.
 
		ENDIF
 
		IF MOD(lnZ2,10)=0
 
			RETURN .T.
 
		ENDIF
 
 
	ELSE
 
		lnZ1=lnZ1+VAL(SUBSTR(STR(lnAx7,2),1,1))+VAL(SUBSTR(STR(lnAx7,2),2,1))
 
		IF MOD(lnZ1,10)=0
 
			RETURN .T.
 
		ENDIF
 
	ENDIF
 
	RETURN .F.
 
ENDFUNC | 
			 
		  | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |