Special Report

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

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

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

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

mk Thu, 18/10/2007 - 03:05

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

krunapon Thu, 18/10/2007 - 09:47

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

lew Thu, 18/10/2007 - 14:17

In reply to by krunapon

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

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

LewCPE

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 นะเนี่ย

Luzif3r Thu, 18/10/2007 - 15:43

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

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

moniguna Thu, 18/10/2007 - 16:38

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

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 ที่ส่งกลับมา เห็นด้วยค่ะว่าชื่ออิลิเมนต์เยอะไป และไม่สื่อความหมาย

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

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

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 ส่วนเกิน จะรับไว้พิจารณาแก้ไขค่ะ

audy Fri, 19/10/2007 - 13:27

In reply to by rdwebmaster

โอ้! แจ๋ว

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

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

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

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

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

rdwebmaster Fri, 19/10/2007 - 16:48

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