|
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 |
|
回頂端 |
|
|
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|