หลายโปรแกรมอาจต้องการมีส่วนในการตรวจสอบความถูกต้องของหมายเลขประจำตัวประชาชน ซึ่งทางกรมสรรพากรก็ให้บริการเว็บเซอร์วิสนี้ เนื่องจากเว็บเซอร์วิสของกรมสรรพกรให้บริการโดยใช้ 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); } }
Comments
อันนี้เอาไปไว้ Codenode ดีกว่ารึเปล่าครับ?
ผมเข้าใจว่าชื่อ "กรมสรรพากร" มากกว่ารึเปล่าครับ
ขอบคุณค่ะ แก้ไขแล้วค่ะ คุณ mk
คุณ tr ค่ะ ถ้าเอาไปไว้ที่ codenone เอาไปไว้ในส่วนไหนดีคะ ที่เอาไว้ blognone เพราะคิดว่าจะเป็นประโยชน์กับคนไอทีโดยทั่วไปด้วยค่ะ
ผมว่าไว้ตรงนี้ก็ได้ล่ะครับ เรามีเซ็คชั่น In-Depth ไว้คุยเรื่องพวกนี้กันอยู่แล้ว
ส่วนถ้าจะเอาไปโพส Codenone อีกครั้งก็ตามสะดวกครับ
LewCPE
lewcpe.com, @wasonliw
codenone ดีกว่า นี่มันเขียนโปรแกรมเลยนา....
ถ้าจะลง blognone น่าจะเขียนแค่ว่ากรมสรรพากรให้บริการ web service สำหรับเชค ID แล้ว อะไรประมาณนี้อะค่ะ
ps. เพิ่งรุ้ว่าเขาเปิดบริการนี้แล้ววันนี้นะเนี่ยะ ขอบคุณนะคะ
ถามเพิ่มนิดนึงนะครับ
บริการตัวนี้สามารถตรวจสอบความต้องได้มากน้อยแค่ไหนครับ
หรือว่าแค่ตรวจสอบ Digit ตามสูตรเฉยๆ
ถ้าผมปลอมเลขบัตรประชาชน แบบที่เด็ก ๆ ใช้ปลอมไปสมัครเกมส์ออนไลน์ ระบบจะทราบหรือเปล่า
กรมสรรพากรมีเอกสาร API มั๊ยครับ
ผมอยากได้ REST หรืออย่างน้อยก็ XML-RPC มากกว่า SOAP นะเนี่ย
มีเอกสารสำหรับ SOAP นะครับ ถ้าจำไม่ผิด
onedd.net
เห็น import แล้วปาดเหงื่อ
รู้สึกว่า จะ check แค่ digit นะครับ มั่วๆไป มันก็ยังได้
ส่วน API ลองเข้าไปดูได้ที่ Web เลยอะครับ WebService มันจะมีหลายอย่างเหมือนกัน
ถ้า check แค่ digit ล่ะก็... เมื่อก่อนผมก็เคยทำครับ มีสูตรตายตัวเลยครับ
ไม่ชอบ response ที่ส่งกลับมาเลย
มันมี element ที่ไม่เกี่ยวกับผลลัพท์ที่ต้องการรู้เยอะไปหน่อย (เช่น diffgram, newDataSet)
ไม่ได้ตรวจสอบแค่ digit ค่ะ อาจจะบังเอิญว่ามีคนที่มีบัตรประจำตัวประชาชนหมายเลข3000000000005 แต่ถ้าทดสอบด้วยการเปลี่ยนแค่ digit หลังเป็น 1-4 เป็น PIN 3000000000001 -3000000000004 สิ่งที่เว็บเซอร์วิสให้ผลกลับมาคือ
"เลข PIN ไม่ถูกต้อง เนื่องจาก หมายเลขPINเป็นตัวอักษรหรือเลขPINเป็นตัวอักษรหรือจำนวนหลักเท่ากับ13หลักหรือรูปแบบ PINไม่ถูกต้อง"
ในเรื่องของ response ที่ส่งกลับมา เห็นด้วยค่ะว่าชื่ออิลิเมนต์เยอะไป และไม่สื่อความหมาย
ขอโทษนะคะ แต่บ.เรามี algo สำหรับตรวจสอบว่าเลขบัตรประชาชนเป็นเลขที่ถูกต้อง "ตามหลัก" ของเลขบัตรประชาชนมั้ย (ขอกรมสรรพากรมา) ซึ่งพอใช้ตัวนี้ 3000000000005 ก็ถูกต้องตามหลักค่ะ และ 3000000000001 - 4 ก็ไม่ถูกต้องค่ะ ซึ่งสามารถตรวจสอบได้โดยไม่ต้องเชคกับ DB เลยว่ามีจริงหรือไม่นะคะ แค่คำนวนตัวเลขเอา ดังนั้นการทดสอบตรงนี้บอกไม่ได้ค่ะว่าเชคกับ db ของกรมแล้ว มีใช้จริงหรือเปล่า
อยากทราบอัลกอริทึมที่ว่าจังเลยครับ
พอจะเปิดเผยได้มั๊ย
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
lewcpe.com, @wasonliw
ผมเข้าใจว่ามันเป็นความลับอยู่เหมือนกันนะครับ
ลองค้นดูครับ มีออกเยอะพอสมควร
โอเปอเรชันต่าง ๆ สามารถดูได้ที่ http://www.rd.go.th/webservice
เอกสารการเรียกใช้เว็บเซอร์วิสของกรมสรรพากร สามารถดาวน์โหลดได้จาก http://www.rd.go.th/webservice/new/manual_php.pdf
และคิดว่าไม่มีการให้บริการแบบ REST Web Service มีแต่แบบ SOAP Web Service
คิดว่าเว็บเซอร์วิสของกรมสรรพากร เขาก็ควรจะให้ข้อมูลที่ถูกต้อง ไม่งั้นก็คงจะเสียชื่อเขาแย่ ที่เอามาเผยแพร่เพราะคิดว่าจะเป็นประโยชน์ต่อคนอื่นค่ะ และเป็นการยกตัวอย่างการเรียกใช้เว็บเซอร์วิสจริงที่พัฒนาโดยคนไทย ไม่ได้ทำงานที่กรมสรรพากร และไม่ได้มีจุดประสงค์เป็นอย่างอื่นนอกจากต้องการให้เกิดการเรียนรู้และเกิดประโยชน์ค่ะ
หากท่านใดที่ต้องการจะทราบว่าข้อมูลที่ส่งค่ามาจากการตรวจสอบนั้น เอามาจากไหน ควรจะติดต่อถามที่ กรมสรรพากร The Revenue Department โทร. 0-2272-8000 อีเมล์ : webmaster@rd.go.th
ก่อนอื่นต้องขอบคุณสำหรับการแบ่งปันและแลกเปลี่ยน
บริการนี้น่าสนใจมาก สำหรับผู้ที่ต้องการตรวจสอบความถูกต้อง ของข้อมูลสมาชิก ในกรณีที่เก็บข้อมูลบัตรประชาชน (เก็บข้อมูลสมาชิกเยอะ ๆ ตามพรบ.คอมพิวเตอร์ฉบับใหม่)
ในความเห็นส่วนตัวของผม
หากเป็นการตรวจสอบแค่ดิจิต และสามารถตรวจสอบได้ด้วยวิธีอื่นโดยไม่ผ่านบริการของกรมสรรพากร ตามที่คุณ smilelovehappiness ได้กล่าวอ้าง
มันยังไม่เพียงพอครับ
อยากได้แบบนี้ครับ
http://www.khonthai.com/Election/lles/detail.php
ไม่รู้ว่าหน่อยงานไหน จะให้บริการหรือเปล่า
จ่ายตังค์ก็ยอมครับ ขอเพียงแต่รับรองว่า ข้อมูลที่ได้สามารถนำไปเป็นข้อมูลโต้แย้งในชั้นศาลได้
ขอบคุณทุกๆ ความคิดเห็นที่มีต่อ Web Services กรมสรรพากรค่ะ ต้องขอบอกว่าเป็นการตรวจสอบแค่ Digit ทั้งเลขประจำตัวประชาชน (PIN) และเลขประจำตัวผู้เสียภาษีอากร (TIN) ไม่สามารถให้บริการแบบเป็นการทั่วไปได้มากกว่านี้ถึงแม้เราจะมีข้อมูลอยู่ก็ตาม มีปัญหาเรื่องข้อบังคับของกฏหมายค่ะ ในส่วนของการตรวจสอบเลขประจำตัวประชาชน พวกคุณอาจจะคิดว่าไม่มีประโยชน์ถ้าให้บริการเท่านี้เพราะสามารถหาจากที่อื่นๆ ก็ได้ แต่การตรวจสอบเลขประจำตัวผู้เสียภาษีมีประโยชน์มากสำหรับผู้ประกอบธุรกิจ เพราะสามารถตรวจสอบได้ว่าผู้ที่ตนเองติดต่ออยู่ด้วยใช้เลขประจำตัวผู้เสียภาษีที่ถูกต้อง และมีอยู่จริงในฐานข้อมูลกรมสรรพากร เอาใว้ตรวจสอบพวกออกใบกำกับภาษีปลอมได้
ส่วน response ที่มี element ส่วนเกิน จะรับไว้พิจารณาแก้ไขค่ะ
โอ้ มีคนทำงานจริงมาอธิบายด้วย ขอบคุณครับ :)
LewCPE
lewcpe.com, @wasonliw
โอ้! แจ๋ว
แบบนี้แหละครับ ที่ต้องการเห็น การแลกเปลี่ยน ติชม เพื่อการพัฒนา
โดยส่วนตัวผมชื่นชมหน่วยงานนี้นะครับ ที่นำไอทีมาประยุกต์ใช้ (อีกหลายหน่วยงานที่ชื่นชมคือ การท่าเรือ, กรมศุลกากร)
และสิ่งที่ผมอยากได้ ก็ไม่ได้คาดหวังว่าจะได้จากกรมสรรพากรหรอกครับ
หวังแต่เพียงว่า หน่วยงานอื่นที่เกี่ยวข้อง จะมองเห็นประโยชน์และความสำคัญครับ
ขอบคุณคุณ rd webmaster มากค่ะที่ตอบอีเมลที่ได้แจ้งไปเกี่ยวกับบันทึกนี้และเข้ามาตอบคำถามที่บันทึกนี้ด้วย และขอบคุณกรมสรรพากรที่เป็นตัวอย่างขององค์กรที่ดีในการนำเทคโนโลยีมาให้บริการกับประชาชนเพื่อใ้ห้เกิดความสะดวกต่อประชาชน
ขอบคุณทุกท่านที่เข้ามาแลกเปลี่ยนข้อคิดเห็นค่ะ
ขอแนะนำอีก 1 บริการของกรมสรรพากรค่ะ เผื่อจะนำไปใช้ประโยชน์กันได้บ้าง คือ Vat Refund for Tourist Info ซึ่งให้บริการข้อมูลผู้ประกอบการ ที่ได้รับสิทธิเมื่อนักท่องเที่ยวต่างประเทศ ซื้อสินค้าแล้วสามารถเรียกคืนภาษีมูลค่าเพิ่มได้ในภายหลัง โดยให้บริการสำหรับผู้ที่ต้องการนำข้อมูลดังกล่าวไปให้บริการนักท่องเที่ยวเพื่อตรวจสอบร้านค้าที่นักท่องเที่ยวสามารถเรียกคืนภาษีมูลค่าเพิ่มได้ถูกต้องตามกฎหมายซึ่งป้องกันการแอบอ้างจากร้านค้าซึ่งจะเป็นปัญหาต่อนักท่องเที่ยวในภายหลัง และให้นักท่องเที่ยวมีความมั่นใจในการซื้อสินค้าจากร้านดังกล่าว คิดดูว่าจะดีแค่ไหนถ้าเราเป็นบริษัทนำเที่ยวแล้วสามารถเรียกใช้ Web Services กรมสรรพากรไปเชื่อมโยงกับภาพแผนที่คล้ายๆ Google Earth นักท่องเที่ยวต่างชาติเข้ามาดูในเว็บ คลิกดูได้ว่ารายการนำเที่ยวที่เราจัดให้ในจังหวัดนี้ ถนนนี้ มีร้านค้าชื่ออะไรบ้าง ตั้งอยู่ตรงส่วนไหนของถนน ที่สามารถซื้อสินค้าแล้วได้รับภาษีมูลค่าเพิ่มคืน