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

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 5 9 1 7 3 0

7 ธันวาคม พ.ศ.2549
86 Users On-Line.
Visitors - Page views
 8 9 4 6 7 8 0
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

แจกฟรี ASP Script สำหรับการสุ่มหมายเลขบัตรประชาชน

Category »  ASP/ASP.Net
โดย : Webmaster เมื่อ 13/11/2553   เวลา: 17:42
(อ่าน : 16017) 
ก็ห่างหายจากการเขียนบทความเกี่ยวกับ ASP Script ไปเป็นปีๆเลยทีเดียว ... พอนำออกมาเขียนสักครั้ง ก็ต้องเคาะสนิมออกมาเสียงดังโป๊งกันเลยทีเดียว 55555+ ... รายละเอียดก็ดูตามคอมเมนท์ที่ผมเขียนเอาไว้ที่ Script แล้ว ... แต่ที่สำคัญ คือ บัตรประชาชนที่เราใช้กันอยู่ปัจจุบัน หลักแรกจะไม่มีเลข 0 และ เลข 9 นำหน้าน่ะครับ ... ดังนั้นหลักการ คือ จะต้องสุ่มตัวเลขเฉพาะหลักแรกออกมาก่อน วนรอบจนกว่าผลที่ได้ไม่ใช่เลข 0 หรือ เลข 9 จึงจะไปสุ่มหาเลขตัวที่ 2 - 12 ต่อไป ... สุดท้ายคือการคำนวณหาหลักที่ 13 ซึ่งเป็นหลักตรวจสอบความถูกต้อง (Check Digit) ... (หมายเหตุ: แต่จะมีสักกี่คนที่จะเข้ามาโหลด ASP Script ของผม เพราะส่วนใหญ่เขาใช้ PHP กันทั้งนั้น ... ส่วนตัวผมเอง ก็ยังคงเป็นข้าทาสรับใช้เทคโนโลยีผู้ซื่อสัตย์ของเล็กนิ่ม - Microsoft ต่อไปตลอดกาลนาน)
สามารถทดสอบผ่านเว็บไซต์แห่งนี้ได้เลย ... ที่นี่
ดาวน์โหลดไฟล์ ASP Script การสุ่มหมายเลขบัตรประชาชน
ข้อมูลเพิ่มเติม
แจกฟรี Source Code โปรแกรมการสุ่มหมายเลขบัตรประชาชน (VB6)
Source Code โปรแกรมการตรวจสอบหมายเลขบัตรประชาชน (VB6 + VB.Net)
มาดู Script กันเถอะ ...

<%
' เรียกไปยังฟังค์ชั่นในการสุ่มหมายเลขบัตรประชาชนเลยทันที
Call RandomNumber
%>
<h1>ASP Script การสุ่มหมายเลขบัตรประชาชน - www.g2gnet.com</h1>
<form name="frmRandom" method="post" action="">
<% Response.Write RandomNumber %>  
<input type="submit" name="cmdRandom" id="cmdRandom" 
value="สุ่มหมายเลขบัตรประชาชน" onClick="Call RandomNumber()">
</form>

<%
' ########################################################
Function RandomNumber
' ########################################################
    
    ' เริ่มต้นในการสุ่มตัวเลขก่อน
    Randomize
    
    ' สูตรการสุ่มตัวเลข เมื่อ High = ค่าสูงสุด และ Low = ค่าต่ำสุด
    'RandomNumber = Int((High - Low + 1) * Rnd) + Low
    
    ' ตั้งค่าเป็น False ไว้ก่อน
    blnFlag = False
    
    ' สุ่มเลขจำนวน 12 หลัก โดยที่หลักแรกต้องไม่ใช่ 0 และ 9
    ' เนื่องจากเราใช้การนับเริ่มต้นจาก 1 ไปสิ้นสุดที่ 12 โดยมีค่าเพิ่มขึ้นทีละ 1 เหมาะสมที่จะใช้ For
    For i = 1 To 12
        ' Not False หรือ ไม่จริง ก็คือ เท็จ (หรือเขียน blnFlag = False) ... 
        ' แสดงว่าตอนนี้เรากำลังจะหาตัวเลขหลักแรกอยู่
        If Not blnFlag Then
            ' สุ่มตัวเลขหลักแรก ต้องไม่ให้มีค่าเป็น 0 และ 9 ... นี่คือการทำซ้ำ หรือ Repetitive
            ' ใช้การวนรอบ (Loop) แบบ For จะไม่เหมาะสมสำหรับงานนี้ 
            ' เพราะเราไม่รู้ค่าเริ่มต้น ค่าสิ้นสุด และ ค่าเพิ่ม (หรือลด)
            ' แต่มันก็นำมาใช้ได้เหมือนกันน่ะครับ เพราะมันมีคำสั่งให้ออกจาก Loop ด้วย Exit For อยู่
            Do
                
                ' สุ่มหาตัวเลข 0 - 9 ... หากได้ 0 หรือ 9 ต้องสุ่มตัวเลขใหม่
                RandomNumber = Int((9 + 1) * Rnd)
                
            ' ทำจนกว่าหลักแรกต้องไม่เท่ากับ 0 และ 9 (เงื่อนไขต้องใช้ AND)
            ' เช่น เมื่อ RandomNumber มีค่า = 1
            ' ทำให้ได้เงื่อนไข 1 <> 0 และ 1 <> 9 (True AND True = True) 
            ' เงื่อนไขเป็น "จริง" ให้ออกจาก Loop
            
            ' หรือ เมื่อ RandomNumber มีค่า = 9
            ' ทำให้ได้เงื่อนไข 9 <> 0 และ 9 <> 9 (True AND False = False)
            ' เงื่อนไขเป็น "เท็จ" ให้วน Loop ต่อไป
            Loop Until RandomNumber <> 0 And RandomNumber <> 9
            
            ' หรือ ใช้เงื่อนไข Until แต่กลับกันด้วย Not
            'Loop Until Not RandomNumber = 0 And Not RandomNumber = 9
            
            ' หรือใช้ While แต่เงื่อนไขต้องกลับกันกับแบบ Until และต้องใช้ OR แทนที่
            ' เช่น เมื่อ RandomNumber มีค่า = 1
            ' ทำให้ได้เงื่อนไข 1 = 0 หรือ 1 = 9 (False OR False = False)
            ' เงื่อนไขเป็น "เท็จ" ให้ออกจาก Loop
            
            ' หรือ เมื่อ RandomNumber มีค่า = 9
            ' ทำให้ได้เงื่อนไข 9 = 0 หรือ 9 = 9 (False OR True = True)
            ' เงื่อนไขเป็น "จริง" ให้วน Loop ต่อไป
            'Loop While RandomNumber = 0 Or RandomNumber = 9
            
            ' แจ้งว่าหลักแรกหาตัวเลขที่ไม่ใช่ 0 หรือ 9 เสร็จสมบูรณ์แล้ว 
            ' หลักต่อไปจะได้ไม่ต้องเข้าไป Do Loop อีก
            blnFlag = True
			
            ' Flag ตัวนี้จะเปลี่ยนเป็น False เมื่อหาตัวเลขหลักต่อไป
            blnCheck = True
			
        End If

        ' หาก blnFlag เป็นจริง และ blnCheck เป็นจริง แสดงว่าพึ่งหลุดออกจาก Loop Do While
        If blnFlag And blnCheck Then
            ' จากหลักที่ 2 - 12 ต้องไม่ให้กลับมาในส่วนนี้อีก ให้ลงไปทำที่ Else เลย
            blnCheck = True
        Else
            RandomNumber = RandomNumber & Int((9 + 1) * Rnd)
        End If
		
    Next

    ' ########################################################
    ' เริ่มต้นคำนวณหาค่าผลรวมตัวเลขทั้ง 12 หลักแรกที่ได้ ดังนี้
    ' หาผลรวมตั้งแต่หลักที่ 1 ไปจนถึงหลักที่ 12 (นับจากซ้ายไปขวา)
    ' โดยให้หลักที่ 1 คูณด้วยน้ำหนักประจำหลัก = 13
    ' โดยให้หลักที่ 2 คูณด้วยน้ำหนักประจำหลัก = 12
    ' โดยให้หลักที่ 3 คูณด้วยน้ำหนักประจำหลัก = 11
    ' โดยให้หลักที่ .. คูณด้วยน้ำหนักประจำหลัก = ..
    ' โดยให้หลักที่ 12 คูณด้วยน้ำหนักประจำหลัก = 2
    ' จากนั้นนำผลการคูณของแต่ละหลักมารวมกันเข้าไป

    ' หลักแต่ละหลัก คือ Mid(RandomNumber, Count, 1))
    ' น้ำหนักของแต่ละหลัก คือ (14 - Count) เมื่อ Count เริ่มต้นจาก 1 ไปสิ้นสุดที่ 12
    ' ดังนั้นค่านี้ (14 - Count) จึงเริ่มต้นค่าจาก 13, 12, 11, ..., สิ้นสุดที่ 2 ครับผม
    Sum = 0 ' Clear ค่าผลรวมก่อน (เพื่อความแน่ใจ)
    For Count = 1 To 12
        Sum = Sum + Mid(RandomNumber, Count, 1) * (14 - Count)
    Next

    ' ########################################################
    ' ขั้นตอนนี้ คือ การหาค่า Check Digit หรือ หลักตรวจสอบความถูกต้อง (หลักที่ 13)
    ' นำผลรวมที่ได้ (Sum) มา Mod (การหารเอาเศษ) ด้วย 11 
    ' นั่นคือค่าที่เราจะได้ก็คือ 0, 1, 2, .. , 10 (Sum Mod 11)
    ' จากนั้นให้ลบออกด้วย 11 ก็จะทำให้ได้ค่าตั้งแต่ 1, 2, 3, ... , 11 (11 - (Sum Mod 11))
    ' แล้วให้เลือกตัวขวามือสุดมาหนึ่งตัว ด้วยคำสั่ง Right$ --> Right$(Str(11 - (Sum Mod 11)), 1)
    ' ค่าสุดท้ายนี้ก็คือ หลักที่ 13 หรือ หลักตรวจสอบความถูกต้อง (Check Digit) นั่นเอง
    CheckDigit = Right(11 - (Sum Mod 11), 1)
    ' ########################################################
    
    ' ########################################################
    ' เอาค่ามาจัดเรียงเพื่อนำไปใช้ในการสมัครเล่นเกมส์ต่อไป ... 55555+
    '
    RandomNumber = RandomNumber & CheckDigit
    '
    ' ########################################################

End Function
%>

Conclusion:
เรียกได้ว่า VB มันจะมาคู่กันกับ ASP เลยก็ว่าได้ แล้วยิ่งผสมผสานกับการอ่าน Tag ของ HTML ได้ด้วย (ก็ทำเว็บได้นั่นแหละครับ) ก็ยิ่งจะทำให้เข้าใจใน ASP Script ได้อย่างไม่ยากนัก ... สำหรับ ASP Script ที่ใช้งานนี้ (RandomNumber) มันไม่ได้เปลี่ยนไปจากเดิมของ VB6 เลย ... แต่ที่สำคัญมากที่สุดเห็นจะเป็นเรื่องของ Algorithm ซ่ะมากกว่า เพราะมันก็ไม่ได้เปลี่ยนแปลงไปตามภาษา หรือ เครื่องมือที่ใช้งานเลยครับ ... พี่น้อง

จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560