Tags:
Node Thumbnail

หลายโปรแกรมอาจต้องการมีส่วนในการตรวจสอบความถูกต้องของหมายเลขประจำตัวประชาชน ซึ่งทางกรมสรรพากรก็ให้บริการเว็บเซอร์วิสนี้ เนื่องจากเว็บเซอร์วิสของกรมสรรพกรให้บริการโดยใช้ 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);
    }
}

ผลลัพธ์ีที่ได้เมื่อหมายเลขบัตรประจำตัวประชาชนถูกต้อง

ผลลัพธที่ได้เมื่อหมายเลขบัตรประจำตัวประชาชนไม่ถูกต้อง

Get latest news from Blognone

Comments

By: tr
Writer
on 18 October 2007 - 02:04 #33651

อันนี้เอาไปไว้ Codenode ดีกว่ารึเปล่าครับ?

By: mk
FounderAndroid
on 18 October 2007 - 03:05 #33659
mk's picture

ผมเข้าใจว่าชื่อ "กรมสรรพากร" มากกว่ารึเปล่าครับ

By: krunapon on 18 October 2007 - 09:46 #33671

ขอบคุณค่ะ แก้ไขแล้วค่ะ คุณ mk

By: krunapon on 18 October 2007 - 09:47 #33672

คุณ tr ค่ะ ถ้าเอาไปไว้ที่ codenone เอาไปไว้ในส่วนไหนดีคะ ที่เอาไว้ blognone เพราะคิดว่าจะเป็นประโยชน์กับคนไอทีโดยทั่วไปด้วยค่ะ

By: lew
FounderJusci's WriterMEconomicsAndroid
on 18 October 2007 - 14:17 #33691 Reply to:33672
lew's picture

ผมว่าไว้ตรงนี้ก็ได้ล่ะครับ เรามีเซ็คชั่น In-Depth ไว้คุยเรื่องพวกนี้กันอยู่แล้ว

ส่วนถ้าจะเอาไปโพส Codenone อีกครั้งก็ตามสะดวกครับ

LewCPE


lewcpe.com, @wasonliw

By: smilelovehappiness on 18 October 2007 - 10:58 #33674

codenone ดีกว่า นี่มันเขียนโปรแกรมเลยนา....
ถ้าจะลง blognone น่าจะเขียนแค่ว่ากรมสรรพากรให้บริการ web service สำหรับเชค ID แล้ว อะไรประมาณนี้อะค่ะ

ps. เพิ่งรุ้ว่าเขาเปิดบริการนี้แล้ววันนี้นะเนี่ยะ ขอบคุณนะคะ

By: audy
AndroidUbuntu
on 18 October 2007 - 11:40 #33681
audy's picture

ถามเพิ่มนิดนึงนะครับ

บริการตัวนี้สามารถตรวจสอบความต้องได้มากน้อยแค่ไหนครับ
หรือว่าแค่ตรวจสอบ Digit ตามสูตรเฉยๆ
ถ้าผมปลอมเลขบัตรประชาชน แบบที่เด็ก ๆ ใช้ปลอมไปสมัครเกมส์ออนไลน์ ระบบจะทราบหรือเปล่า

By: sugree
FounderWriterAndroidBlackberry
on 18 October 2007 - 13:33 #33690

กรมสรรพากรมีเอกสาร API มั๊ยครับ

ผมอยากได้ REST หรืออย่างน้อยก็ XML-RPC มากกว่า SOAP นะเนี่ย

By: wiennat
Writer
on 18 October 2007 - 14:24 #33693 Reply to:33690

มีเอกสารสำหรับ SOAP นะครับ ถ้าจำไม่ผิด


onedd.net

By: mk
FounderAndroid
on 18 October 2007 - 14:56 #33696 Reply to:33690
mk's picture

เห็น import แล้วปาดเหงื่อ

By: Luzif3r
iPhoneAndroidWindows
on 18 October 2007 - 15:43 #33699

รู้สึกว่า จะ check แค่ digit นะครับ มั่วๆไป มันก็ยังได้

ส่วน API ลองเข้าไปดูได้ที่ Web เลยอะครับ WebService มันจะมีหลายอย่างเหมือนกัน

By: moniguna on 18 October 2007 - 16:38 #33703

ถ้า check แค่ digit ล่ะก็... เมื่อก่อนผมก็เคยทำครับ มีสูตรตายตัวเลยครับ

By: pphetra
Writer
on 18 October 2007 - 17:37 #33705

ไม่ชอบ response ที่ส่งกลับมาเลย
มันมี element ที่ไม่เกี่ยวกับผลลัพท์ที่ต้องการรู้เยอะไปหน่อย (เช่น diffgram, newDataSet)

By: krunapon on 18 October 2007 - 18:10 #33709

ไม่ได้ตรวจสอบแค่ digit ค่ะ อาจจะบังเอิญว่ามีคนที่มีบัตรประจำตัวประชาชนหมายเลข3000000000005 แต่ถ้าทดสอบด้วยการเปลี่ยนแค่ digit หลังเป็น 1-4 เป็น PIN 3000000000001 -3000000000004 สิ่งที่เว็บเซอร์วิสให้ผลกลับมาคือ

"เลข PIN ไม่ถูกต้อง เนื่องจาก หมายเลขPINเป็นตัวอักษรหรือเลขPINเป็นตัวอักษรหรือจำนวนหลักเท่ากับ13หลักหรือรูปแบบ PINไม่ถูกต้อง"

ในเรื่องของ response ที่ส่งกลับมา เห็นด้วยค่ะว่าชื่ออิลิเมนต์เยอะไป และไม่สื่อความหมาย

By: smilelovehappiness on 18 October 2007 - 19:08 #33713 Reply to:33709

ขอโทษนะคะ แต่บ.เรามี algo สำหรับตรวจสอบว่าเลขบัตรประชาชนเป็นเลขที่ถูกต้อง "ตามหลัก" ของเลขบัตรประชาชนมั้ย (ขอกรมสรรพากรมา) ซึ่งพอใช้ตัวนี้ 3000000000005 ก็ถูกต้องตามหลักค่ะ และ 3000000000001 - 4 ก็ไม่ถูกต้องค่ะ ซึ่งสามารถตรวจสอบได้โดยไม่ต้องเชคกับ DB เลยว่ามีจริงหรือไม่นะคะ แค่คำนวนตัวเลขเอา ดังนั้นการทดสอบตรงนี้บอกไม่ได้ค่ะว่าเชคกับ db ของกรมแล้ว มีใช้จริงหรือเปล่า

By: audy
AndroidUbuntu
on 18 October 2007 - 22:41 #33727 Reply to:33713
audy's picture

อยากทราบอัลกอริทึมที่ว่าจังเลยครับ
พอจะเปิดเผยได้มั๊ย

By: lew
FounderJusci's WriterMEconomicsAndroid
on 18 October 2007 - 23:41 #33729 Reply to:33727
lew's picture


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

By: b39ppr on 20 October 2007 - 10:27 #33815 Reply to:33729

ผมเข้าใจว่ามันเป็นความลับอยู่เหมือนกันนะครับ

By: audy
AndroidUbuntu
on 20 October 2007 - 12:10 #33818 Reply to:33815
audy's picture

ลองค้นดูครับ มีออกเยอะพอสมควร

By: krunapon on 19 October 2007 - 00:09 #33710

โอเปอเรชันต่าง ๆ สามารถดูได้ที่ http://www.rd.go.th/webservice

เอกสารการเรียกใช้เว็บเซอร์วิสของกรมสรรพากร สามารถดาวน์โหลดได้จาก http://www.rd.go.th/webservice/new/manual_php.pdf

และคิดว่าไม่มีการให้บริการแบบ REST Web Service มีแต่แบบ SOAP Web Service

By: krunapon on 18 October 2007 - 22:15 #33723

คิดว่าเว็บเซอร์วิสของกรมสรรพากร เขาก็ควรจะให้ข้อมูลที่ถูกต้อง ไม่งั้นก็คงจะเสียชื่อเขาแย่ ที่เอามาเผยแพร่เพราะคิดว่าจะเป็นประโยชน์ต่อคนอื่นค่ะ และเป็นการยกตัวอย่างการเรียกใช้เว็บเซอร์วิสจริงที่พัฒนาโดยคนไทย ไม่ได้ทำงานที่กรมสรรพากร และไม่ได้มีจุดประสงค์เป็นอย่างอื่นนอกจากต้องการให้เกิดการเรียนรู้และเกิดประโยชน์ค่ะ

หากท่านใดที่ต้องการจะทราบว่าข้อมูลที่ส่งค่ามาจากการตรวจสอบนั้น เอามาจากไหน ควรจะติดต่อถามที่ กรมสรรพากร The Revenue Department โทร. 0-2272-8000 อีเมล์ : webmaster@rd.go.th

By: audy
AndroidUbuntu
on 18 October 2007 - 22:57 #33728
audy's picture

ก่อนอื่นต้องขอบคุณสำหรับการแบ่งปันและแลกเปลี่ยน

บริการนี้น่าสนใจมาก สำหรับผู้ที่ต้องการตรวจสอบความถูกต้อง ของข้อมูลสมาชิก ในกรณีที่เก็บข้อมูลบัตรประชาชน (เก็บข้อมูลสมาชิกเยอะ ๆ ตามพรบ.คอมพิวเตอร์ฉบับใหม่)

ในความเห็นส่วนตัวของผม
หากเป็นการตรวจสอบแค่ดิจิต และสามารถตรวจสอบได้ด้วยวิธีอื่นโดยไม่ผ่านบริการของกรมสรรพากร ตามที่คุณ smilelovehappiness ได้กล่าวอ้าง

มันยังไม่เพียงพอครับ

อยากได้แบบนี้ครับ

http://www.khonthai.com/Election/lles/detail.php

ไม่รู้ว่าหน่อยงานไหน จะให้บริการหรือเปล่า

จ่ายตังค์ก็ยอมครับ ขอเพียงแต่รับรองว่า ข้อมูลที่ได้สามารถนำไปเป็นข้อมูลโต้แย้งในชั้นศาลได้

By: rdwebmaster on 19 October 2007 - 11:32 #33760

ขอบคุณทุกๆ ความคิดเห็นที่มีต่อ Web Services กรมสรรพากรค่ะ ต้องขอบอกว่าเป็นการตรวจสอบแค่ Digit ทั้งเลขประจำตัวประชาชน (PIN) และเลขประจำตัวผู้เสียภาษีอากร (TIN) ไม่สามารถให้บริการแบบเป็นการทั่วไปได้มากกว่านี้ถึงแม้เราจะมีข้อมูลอยู่ก็ตาม มีปัญหาเรื่องข้อบังคับของกฏหมายค่ะ ในส่วนของการตรวจสอบเลขประจำตัวประชาชน พวกคุณอาจจะคิดว่าไม่มีประโยชน์ถ้าให้บริการเท่านี้เพราะสามารถหาจากที่อื่นๆ ก็ได้ แต่การตรวจสอบเลขประจำตัวผู้เสียภาษีมีประโยชน์มากสำหรับผู้ประกอบธุรกิจ เพราะสามารถตรวจสอบได้ว่าผู้ที่ตนเองติดต่ออยู่ด้วยใช้เลขประจำตัวผู้เสียภาษีที่ถูกต้อง และมีอยู่จริงในฐานข้อมูลกรมสรรพากร เอาใว้ตรวจสอบพวกออกใบกำกับภาษีปลอมได้
ส่วน response ที่มี element ส่วนเกิน จะรับไว้พิจารณาแก้ไขค่ะ

By: lew
FounderJusci's WriterMEconomicsAndroid
on 19 October 2007 - 11:58 #33762 Reply to:33760
lew's picture

โอ้ มีคนทำงานจริงมาอธิบายด้วย ขอบคุณครับ :)

LewCPE


lewcpe.com, @wasonliw

By: audy
AndroidUbuntu
on 19 October 2007 - 13:27 #33765 Reply to:33760
audy's picture

โอ้! แจ๋ว

แบบนี้แหละครับ ที่ต้องการเห็น การแลกเปลี่ยน ติชม เพื่อการพัฒนา
โดยส่วนตัวผมชื่นชมหน่วยงานนี้นะครับ ที่นำไอทีมาประยุกต์ใช้ (อีกหลายหน่วยงานที่ชื่นชมคือ การท่าเรือ, กรมศุลกากร)

และสิ่งที่ผมอยากได้ ก็ไม่ได้คาดหวังว่าจะได้จากกรมสรรพากรหรอกครับ

หวังแต่เพียงว่า หน่วยงานอื่นที่เกี่ยวข้อง จะมองเห็นประโยชน์และความสำคัญครับ

By: krunapon on 19 October 2007 - 15:01 #33775 Reply to:33760

ขอบคุณคุณ rd webmaster มากค่ะที่ตอบอีเมลที่ได้แจ้งไปเกี่ยวกับบันทึกนี้และเข้ามาตอบคำถามที่บันทึกนี้ด้วย และขอบคุณกรมสรรพากรที่เป็นตัวอย่างขององค์กรที่ดีในการนำเทคโนโลยีมาให้บริการกับประชาชนเพื่อใ้ห้เกิดความสะดวกต่อประชาชน

ขอบคุณทุกท่านที่เข้ามาแลกเปลี่ยนข้อคิดเห็นค่ะ

By: rdwebmaster on 19 October 2007 - 16:48 #33779

ขอแนะนำอีก 1 บริการของกรมสรรพากรค่ะ เผื่อจะนำไปใช้ประโยชน์กันได้บ้าง คือ Vat Refund for Tourist Info ซึ่งให้บริการข้อมูลผู้ประกอบการ ที่ได้รับสิทธิเมื่อนักท่องเที่ยวต่างประเทศ ซื้อสินค้าแล้วสามารถเรียกคืนภาษีมูลค่าเพิ่มได้ในภายหลัง โดยให้บริการสำหรับผู้ที่ต้องการนำข้อมูลดังกล่าวไปให้บริการนักท่องเที่ยวเพื่อตรวจสอบร้านค้าที่นักท่องเที่ยวสามารถเรียกคืนภาษีมูลค่าเพิ่มได้ถูกต้องตามกฎหมายซึ่งป้องกันการแอบอ้างจากร้านค้าซึ่งจะเป็นปัญหาต่อนักท่องเที่ยวในภายหลัง และให้นักท่องเที่ยวมีความมั่นใจในการซื้อสินค้าจากร้านดังกล่าว คิดดูว่าจะดีแค่ไหนถ้าเราเป็นบริษัทนำเที่ยวแล้วสามารถเรียกใช้ Web Services กรมสรรพากรไปเชื่อมโยงกับภาพแผนที่คล้ายๆ Google Earth นักท่องเที่ยวต่างชาติเข้ามาดูในเว็บ คลิกดูได้ว่ารายการนำเที่ยวที่เราจัดให้ในจังหวัดนี้ ถนนนี้ มีร้านค้าชื่ออะไรบ้าง ตั้งอยู่ตรงส่วนไหนของถนน ที่สามารถซื้อสินค้าแล้วได้รับภาษีมูลค่าเพิ่มคืน