หลายโปรแกรมอาจต้องการมีส่วนในการตรวจสอบความถูกต้องของหมายเลขประจำตัวประชาชน ซึ่งทางกรมสรรพากรก็ให้บริการเว็บเซอร์วิสนี้ เนื่องจากเว็บเซอร์วิสของกรมสรรพกรให้บริการโดยใช้ SSL เพื่อช่วยทำให้มีความปลอดภัยมากยิ่งขึ้น ดังนั้นต้องเข้าโดย “HTTPS” แทนที่จะเป็น “HTTP” ปกติ
ข้างล่างนี้โค้ดที่ใช้ในการเรียกใช้เว็บเซอร์วิสและโอเปอเรชันดังกล่าว และใช้โปรแกรม XTrustProvider.java ที่ SSL Trust Provider for Java เพื่อใช้ในการเรียกเว็บเซอร์วิสที่เข้าถึงโดย HTTPS
package callsoapws;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.Source;
import javax.xml.soap.MessageFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.MimeHeaders;
import com.sun.net.ssl.internal.ssl.*;
import java.security.Security;
/**
* @author Kanda Runapongsa Saikaew and Pongsakorn Poosankam
* Computer Engineering Department
* Khon Kaen University
*
*/
public class CheckPinRDWS {
public void msgEnvelope(String[] args) throws Exception {
SOAPConnectionFactory soapConnectionFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
soapConnectionFactory.createConnection();
MessageFactory messageFactory =
MessageFactory.newInstance();
// Create a message
SOAPMessage message =
messageFactory.createMessage();
// Get the SOAP header and body from the message
// and remove the header
SOAPHeader header = message.getSOAPHeader();
SOAPBody body = message.getSOAPBody();
header.detachNode();
// Create a SOAP factory
// Create a UDDI v2 checkPin body element
SOAPFactory soapFactory =
SOAPFactory.newInstance();
SOAPBodyElement checkPin =
body.addBodyElement(soapFactory.createName("ServicePIN",
"ns", "https://rdws.rd.go.th/ServiceRD/CheckTINPINService"));
SOAPElement username =
checkPin.addChildElement(
soapFactory.createName("username","ns",
"https://rdws.rd.go.th/ServiceRD/CheckTINPINService"));
username.addTextNode("anonymous");
SOAPElement password =
checkPin.addChildElement(
soapFactory.createName("password","ns",
"https://rdws.rd.go.th/ServiceRD/CheckTINPINService"));
password.addTextNode("anonymous");
SOAPElement pin =
checkPin.addChildElement(
soapFactory.createName("PIN","ns",
"https://rdws.rd.go.th/ServiceRD/CheckTINPINService"));
pin.addTextNode("xxx TEST PIN NUMBER xxx");
MimeHeaders hd = message.getMimeHeaders();
hd.addHeader("SOAPAction",
"https://rdws.rd.go.th/ServiceRD/CheckTINPINService/ServicePIN");
message.saveChanges();
System.out.println("REQUEST:");
//Display Request Message
displayMessage(message);
System.out.println("\n\n");
//add code below for trust x.509 ceritficate
XTrustProvider.install();
SOAPConnection conn =
SOAPConnectionFactory.newInstance().createConnection();
SOAPMessage response = conn.call(message,
"https://rdws.rd.go.th/ServiceRD/CheckTINPINService.asmx");
System.out.println("RESPONSE:");
//Display Response Message
displayMessage(response);
}
public void displayMessage(SOAPMessage message) throws Exception {
TransformerFactory tFact = TransformerFactory.newInstance();
Transformer transformer = tFact.newTransformer();
Source src = message.getSOAPPart().getContent();
StreamResult result = new StreamResult( System.out );
transformer.setOutputProperty(OutputKeys.ENCODING, "tis-620");
transformer.transform(src, result);
}
public static void main(String[] args) throws Exception {
CheckPinRDWS clientApp = new CheckPinRDWS();
clientApp.msgEnvelope(args);
}
}
อันนี้เอา
tr Thu, 18/10/2007 - 02:04
อันนี้เอาไปไว้ Codenode ดีกว่ารึเปล่าครับ?
ผมเข้าใจว
mk Thu, 18/10/2007 - 03:05
ผมเข้าใจว่าชื่อ "กรมสรรพากร" มากกว่ารึเปล่าครับ
ขอบคุณค่ะ
krunapon Thu, 18/10/2007 - 09:46
ขอบคุณค่ะ แก้ไขแล้วค่ะ คุณ mk
คุณ tr ค่ะ
krunapon Thu, 18/10/2007 - 09:47
คุณ tr ค่ะ ถ้าเอาไปไว้ที่ codenone เอาไปไว้ในส่วนไหนดีคะ ที่เอาไว้ blognone เพราะคิดว่าจะเป็นประโยชน์กับคนไอทีโดยทั่วไปด้วยค่ะ
ผมว่าไว้ต
lew Thu, 18/10/2007 - 14:17
In reply to คุณ tr ค่ะ by krunapon
ผมว่าไว้ตรงนี้ก็ได้ล่ะครับ เรามีเซ็คชั่น In-Depth ไว้คุยเรื่องพวกนี้กันอยู่แล้ว
ส่วนถ้าจะเอาไปโพส Codenone อีกครั้งก็ตามสะดวกครับ
LewCPE
codenone ดีกว่า
smilelovehappiness Thu, 18/10/2007 - 10:58
codenone ดีกว่า นี่มันเขียนโปรแกรมเลยนา....
ถ้าจะลง blognone น่าจะเขียนแค่ว่ากรมสรรพากรให้บริการ web service สำหรับเชค ID แล้ว อะไรประมาณนี้อะค่ะ
ps. เพิ่งรุ้ว่าเขาเปิดบริการนี้แล้ววันนี้นะเนี่ยะ ขอบคุณนะคะ
ถามเพิ่มน
audy Thu, 18/10/2007 - 11:40
ถามเพิ่มนิดนึงนะครับ
บริการตัวนี้สามารถตรวจสอบความต้องได้มากน้อยแค่ไหนครับ
หรือว่าแค่ตรวจสอบ Digit ตามสูตรเฉยๆ
ถ้าผมปลอมเลขบัตรประชาชน แบบที่เด็ก ๆ ใช้ปลอมไปสมัครเกมส์ออนไลน์ ระบบจะทราบหรือเปล่า
กรมสรรพาก
sugree Thu, 18/10/2007 - 13:33
กรมสรรพากรมีเอกสาร API มั๊ยครับ
ผมอยากได้ REST หรืออย่างน้อยก็ XML-RPC มากกว่า SOAP นะเนี่ย
มีเอกสารส
wiennat Thu, 18/10/2007 - 14:24
In reply to กรมสรรพาก by sugree
มีเอกสารสำหรับ SOAP นะครับ ถ้าจำไม่ผิด
เห็น import
mk Thu, 18/10/2007 - 14:56
In reply to กรมสรรพาก by sugree
เห็น import แล้วปาดเหงื่อ
รู้สึกว่า
Luzif3r Thu, 18/10/2007 - 15:43
รู้สึกว่า จะ check แค่ digit นะครับ มั่วๆไป มันก็ยังได้
ส่วน API ลองเข้าไปดูได้ที่ Web เลยอะครับ WebService มันจะมีหลายอย่างเหมือนกัน
ถ้า check แค่
moniguna Thu, 18/10/2007 - 16:38
ถ้า check แค่ digit ล่ะก็... เมื่อก่อนผมก็เคยทำครับ มีสูตรตายตัวเลยครับ
ไม่ชอบ response
pphetra Thu, 18/10/2007 - 17:37
ไม่ชอบ response ที่ส่งกลับมาเลย
มันมี element ที่ไม่เกี่ยวกับผลลัพท์ที่ต้องการรู้เยอะไปหน่อย (เช่น diffgram, newDataSet)
ไม่ได้ตรว
krunapon Thu, 18/10/2007 - 18:10
ไม่ได้ตรวจสอบแค่ digit ค่ะ อาจจะบังเอิญว่ามีคนที่มีบัตรประจำตัวประชาชนหมายเลข3000000000005 แต่ถ้าทดสอบด้วยการเปลี่ยนแค่ digit หลังเป็น 1-4 เป็น PIN 3000000000001 -3000000000004 สิ่งที่เว็บเซอร์วิสให้ผลกลับมาคือ
"เลข PIN ไม่ถูกต้อง เนื่องจาก หมายเลขPINเป็นตัวอักษรหรือเลขPINเป็นตัวอักษรหรือจำนวนหลักเท่ากับ13หลักหรือรูปแบบ PINไม่ถูกต้อง"
ในเรื่องของ response ที่ส่งกลับมา เห็นด้วยค่ะว่าชื่ออิลิเมนต์เยอะไป และไม่สื่อความหมาย
ขอโทษนะคะ
smilelovehappiness Thu, 18/10/2007 - 19:08
In reply to ไม่ได้ตรว by krunapon
ขอโทษนะคะ แต่บ.เรามี algo สำหรับตรวจสอบว่าเลขบัตรประชาชนเป็นเลขที่ถูกต้อง "ตามหลัก" ของเลขบัตรประชาชนมั้ย (ขอกรมสรรพากรมา) ซึ่งพอใช้ตัวนี้ 3000000000005 ก็ถูกต้องตามหลักค่ะ และ 3000000000001 - 4 ก็ไม่ถูกต้องค่ะ ซึ่งสามารถตรวจสอบได้โดยไม่ต้องเชคกับ DB เลยว่ามีจริงหรือไม่นะคะ แค่คำนวนตัวเลขเอา ดังนั้นการทดสอบตรงนี้บอกไม่ได้ค่ะว่าเชคกับ db ของกรมแล้ว มีใช้จริงหรือเปล่า
อยากทราบอ
audy Thu, 18/10/2007 - 22:41
In reply to ขอโทษนะคะ by smilelovehappiness
อยากทราบอัลกอริทึมที่ว่าจังเลยครับ
พอจะเปิดเผยได้มั๊ย
def f(S):return 11 -
lew Thu, 18/10/2007 - 23:41
In reply to อยากทราบอ by audy
def f(S):return 11 - (sum([int(s)*(len(S)-i+1) for (s,i) in zip(S,range(len(S)))]) % 11)
จัดให้ครับ ใส่ string ของ 12 ตัวแรกแล้วมันจะ return ตัวที่ 13 ออกมาให้ครับ
ที่มา - Choopong
LewCPE
ผมเข้าใจว
b39ppr Sat, 20/10/2007 - 10:27
In reply to def f(S):return 11 - by lew
ผมเข้าใจว่ามันเป็นความลับอยู่เหมือนกันนะครับ
ลองค้นดูค
audy Sat, 20/10/2007 - 12:10
In reply to ผมเข้าใจว by b39ppr
ลองค้นดูครับ มีออกเยอะพอสมควร
โอเปอเรชั
krunapon Fri, 19/10/2007 - 00:09
โอเปอเรชันต่าง ๆ สามารถดูได้ที่ http://www.rd.go.th/webservice
เอกสารการเรียกใช้เว็บเซอร์วิสของกรมสรรพากร สามารถดาวน์โหลดได้จาก http://www.rd.go.th/webservice/new/manual_php.pdf
และคิดว่าไม่มีการให้บริการแบบ REST Web Service มีแต่แบบ SOAP Web Service
คิดว่าเว็
krunapon Thu, 18/10/2007 - 22:15
คิดว่าเว็บเซอร์วิสของกรมสรรพากร เขาก็ควรจะให้ข้อมูลที่ถูกต้อง ไม่งั้นก็คงจะเสียชื่อเขาแย่ ที่เอามาเผยแพร่เพราะคิดว่าจะเป็นประโยชน์ต่อคนอื่นค่ะ และเป็นการยกตัวอย่างการเรียกใช้เว็บเซอร์วิสจริงที่พัฒนาโดยคนไทย ไม่ได้ทำงานที่กรมสรรพากร และไม่ได้มีจุดประสงค์เป็นอย่างอื่นนอกจากต้องการให้เกิดการเรียนรู้และเกิดประโยชน์ค่ะ
หากท่านใดที่ต้องการจะทราบว่าข้อมูลที่ส่งค่ามาจากการตรวจสอบนั้น เอามาจากไหน ควรจะติดต่อถามที่ กรมสรรพากร The Revenue Department โทร. 0-2272-8000 อีเมล์ : webmaster@rd.go.th
ก่อนอื่นต
audy Thu, 18/10/2007 - 22:57
ก่อนอื่นต้องขอบคุณสำหรับการแบ่งปันและแลกเปลี่ยน
บริการนี้น่าสนใจมาก สำหรับผู้ที่ต้องการตรวจสอบความถูกต้อง ของข้อมูลสมาชิก ในกรณีที่เก็บข้อมูลบัตรประชาชน (เก็บข้อมูลสมาชิกเยอะ ๆ ตามพรบ.คอมพิวเตอร์ฉบับใหม่)
ในความเห็นส่วนตัวของผม
หากเป็นการตรวจสอบแค่ดิจิต และสามารถตรวจสอบได้ด้วยวิธีอื่นโดยไม่ผ่านบริการของกรมสรรพากร ตามที่คุณ smilelovehappiness ได้กล่าวอ้าง
มันยังไม่เพียงพอครับ
อยากได้แบบนี้ครับ
http://www.khonthai.com/Election/lles/detail.php
ไม่รู้ว่าหน่อยงานไหน จะให้บริการหรือเปล่า
จ่ายตังค์ก็ยอมครับ ขอเพียงแต่รับรองว่า ข้อมูลที่ได้สามารถนำไปเป็นข้อมูลโต้แย้งในชั้นศาลได้
ขอบคุณทุก
rdwebmaster Fri, 19/10/2007 - 11:32
ขอบคุณทุกๆ ความคิดเห็นที่มีต่อ Web Services กรมสรรพากรค่ะ ต้องขอบอกว่าเป็นการตรวจสอบแค่ Digit ทั้งเลขประจำตัวประชาชน (PIN) และเลขประจำตัวผู้เสียภาษีอากร (TIN) ไม่สามารถให้บริการแบบเป็นการทั่วไปได้มากกว่านี้ถึงแม้เราจะมีข้อมูลอยู่ก็ตาม มีปัญหาเรื่องข้อบังคับของกฏหมายค่ะ ในส่วนของการตรวจสอบเลขประจำตัวประชาชน พวกคุณอาจจะคิดว่าไม่มีประโยชน์ถ้าให้บริการเท่านี้เพราะสามารถหาจากที่อื่นๆ ก็ได้ แต่การตรวจสอบเลขประจำตัวผู้เสียภาษีมีประโยชน์มากสำหรับผู้ประกอบธุรกิจ เพราะสามารถตรวจสอบได้ว่าผู้ที่ตนเองติดต่ออยู่ด้วยใช้เลขประจำตัวผู้เสียภาษีที่ถูกต้อง และมีอยู่จริงในฐานข้อมูลกรมสรรพากร เอาใว้ตรวจสอบพวกออกใบกำกับภาษีปลอมได้
ส่วน response ที่มี element ส่วนเกิน จะรับไว้พิจารณาแก้ไขค่ะ
โอ้
lew Fri, 19/10/2007 - 11:58
In reply to ขอบคุณทุก by rdwebmaster
โอ้ มีคนทำงานจริงมาอธิบายด้วย ขอบคุณครับ :)
LewCPE
โอ้!
audy Fri, 19/10/2007 - 13:27
In reply to ขอบคุณทุก by rdwebmaster
โอ้! แจ๋ว
แบบนี้แหละครับ ที่ต้องการเห็น การแลกเปลี่ยน ติชม เพื่อการพัฒนา
โดยส่วนตัวผมชื่นชมหน่วยงานนี้นะครับ ที่นำไอทีมาประยุกต์ใช้ (อีกหลายหน่วยงานที่ชื่นชมคือ การท่าเรือ, กรมศุลกากร)
และสิ่งที่ผมอยากได้ ก็ไม่ได้คาดหวังว่าจะได้จากกรมสรรพากรหรอกครับ
หวังแต่เพียงว่า หน่วยงานอื่นที่เกี่ยวข้อง จะมองเห็นประโยชน์และความสำคัญครับ
ขอบคุณคุณ
krunapon Fri, 19/10/2007 - 15:01
In reply to ขอบคุณทุก by rdwebmaster
ขอบคุณคุณ rd webmaster มากค่ะที่ตอบอีเมลที่ได้แจ้งไปเกี่ยวกับบันทึกนี้และเข้ามาตอบคำถามที่บันทึกนี้ด้วย และขอบคุณกรมสรรพากรที่เป็นตัวอย่างขององค์กรที่ดีในการนำเทคโนโลยีมาให้บริการกับประชาชนเพื่อใ้ห้เกิดความสะดวกต่อประชาชน
ขอบคุณทุกท่านที่เข้ามาแลกเปลี่ยนข้อคิดเห็นค่ะ
ขอแนะนำอี
rdwebmaster Fri, 19/10/2007 - 16:48
ขอแนะนำอีก 1 บริการของกรมสรรพากรค่ะ เผื่อจะนำไปใช้ประโยชน์กันได้บ้าง คือ Vat Refund for Tourist Info ซึ่งให้บริการข้อมูลผู้ประกอบการ ที่ได้รับสิทธิเมื่อนักท่องเที่ยวต่างประเทศ ซื้อสินค้าแล้วสามารถเรียกคืนภาษีมูลค่าเพิ่มได้ในภายหลัง โดยให้บริการสำหรับผู้ที่ต้องการนำข้อมูลดังกล่าวไปให้บริการนักท่องเที่ยวเพื่อตรวจสอบร้านค้าที่นักท่องเที่ยวสามารถเรียกคืนภาษีมูลค่าเพิ่มได้ถูกต้องตามกฎหมายซึ่งป้องกันการแอบอ้างจากร้านค้าซึ่งจะเป็นปัญหาต่อนักท่องเที่ยวในภายหลัง และให้นักท่องเที่ยวมีความมั่นใจในการซื้อสินค้าจากร้านดังกล่าว คิดดูว่าจะดีแค่ไหนถ้าเราเป็นบริษัทนำเที่ยวแล้วสามารถเรียกใช้ Web Services กรมสรรพากรไปเชื่อมโยงกับภาพแผนที่คล้ายๆ Google Earth นักท่องเที่ยวต่างชาติเข้ามาดูในเว็บ คลิกดูได้ว่ารายการนำเที่ยวที่เราจัดให้ในจังหวัดนี้ ถนนนี้ มีร้านค้าชื่ออะไรบ้าง ตั้งอยู่ตรงส่วนไหนของถนน ที่สามารถซื้อสินค้าแล้วได้รับภาษีมูลค่าเพิ่มคืน