VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

統一編號檢查

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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
回頂端
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作