หลักการตรวจเช็คความถูกต้องเลขบัตรประชาชน อ่านได้ที่ http://www.thaiadmin.org/board/index.php?topic=53247.msg230422#msg230422
def checkPID(pid):
if(len(pid) != 13): # ถ้า pid ไม่ใช่ 13 ให้คืนค่า False
return False
num=0 # ค่าสำหรับอ้างอิง index list ข้อมูลบัตรประชาชน
num2=13 # ค่าประจำหลัก
listdata=list(pid) # list ข้อมูลบัตรประชาชน
sum=0 # ผลลัพธ์
while num<12:
sum+=int(listdata[num])*(num2-num) # นำค่า num เป็น index list แต่ละตัว * (num2 - num) แล้วรวมเข้ากับ sum
num+=1 # เพิ่มค่า num อีก 1
digit13 = sum%11 # sum หาร 11 เอาเศษ
if digit13==0: # ถ้าเศษ = 0
digit13=1 # ค่าหลักที่ 13 คือ 1
elif digit13==1: # ถ้าเศษ = 1
digit13=0 # ค่าหลักที่ 13 คือ 0
else:
digit13=11-digit13 # ถ้าเศษไม่ใช่กับอะไร ให้เอา 11 - digit13
if digit13==int(listdata[12]): # ถ้าค่าหลักที่ 13 เท่ากับค่าหลักที่ 13 ที่ป้อนข้อมูลมา คืนค่า True
return True
else: # ถ้าค่าหลักที่ 13 ไม่เท่ากับค่าหลักที่ 13 ที่ป้อนข้อมูลมา คืนค่า False
return False
checkPID("เลขบัตรประชาชน")
Reference : https://python3.wannaphong.com/2016/07/python.html
ดึงข้อมูลจากวิกิพีเดีย
import wikipedia
wikipedia.set_lang("th")
us = wikipedia.summary("สหรัฐอเมริกา", sentences=1)
print(us)
Output
สหรัฐอเมริกา (อังกฤษ: United States of America) หรือมักย่อว่า สหรัฐฯ หรือ อเมริกา
เป็นสหพันธรัฐประชาธิปไตย ปกครองภายใต้รัฐธรรมนูญ ประกอบด้วยรัฐ 50 รัฐ และหนึ่งเขตปกครองกลาง
มี 48 รัฐและกรุงวอชิงตัน ดี.ซี.
msinfo32 /nfo C:\com_info.nfo
msinfo32 /report C:\com_info.txt
เขียนโปรแกรม Bluetooth
ในภาษา Python มีโมดูลสำหรับใช้เขียนโปรแกรมควบคุม Bluetooth คือ โมดูล PyBluez
สำหรับ Windows โหลด whl มาติดตั้งได้ที่ http://www.lfd.uci.edu/~gohlke/pythonlibs/#pybluez
สำหรับ Linux และ Mac OS X ให้ทำการติดตั้ง Bluez ก่อน แล้วติดตั้งด้วยคำสั่ง
รับจำนวนและแสดง MAC address ของอุปกรณ์บลูทูธ
import bluetooth
nearby_devices = bluetooth.discover_devices(lookup_names=True)
print("found %d devices" % len(nearby_devices))
for addr, name in nearby_devices:
print(" %s - %s" % (addr, name))
Output
found 1 devices
48:26:2C:92:A4:17 - iPhone ของ Sarawut
สามารถเขียนโค้ดโปรแกรมส่งข้อมูลโดยใช้ socket ผ่าน Bluetooth ดังนี้ ฝั่ง Client
import bluetooth
serverMACAddress = '48:26:2C:92:A4:17'
port = 3
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.connect((serverMACAddress, port))
while True:
text = input("Text : ")
if text == "quit":
break
s.send(text)
s.close()
ฝั่ง Server
import bluetooth
hostMACAddress = '48:26:2C:92:A4:17' # เป็น MAC address ของ Bluetooth adapter ใน server
port = 3
backlog = 1
size = 1024
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.bind((hostMACAddress, port))
s.listen(backlog)
try:
client, clientInfo = s.accept()
while 1:
data = client.recv(size)
if data:
print(data)
client.send(data) # Echo back to client
except:
print("Closing socket")
client.close()
s.close()
Code fork จาก http://blog.kevindoran.co/bluetooth-programming-with-python-3/
เอกสารการใช้งาน https://github.com/karulis/pybluez
ศึกษาโค้ดจากตัวอย่างได้ที่ https://github.com/karulis/pybluez/tree/master/examples
บทความทั้งหมดในบล็อกนี้เขียนโดย นาย วรรณพงษ์ ภัททิยไพบูลย์ ที่ https://python3.wannaphong.com/
cpuinfo()
โมดูล Py-cpuinfo เป็นโมดูลสำหรับรับข้อมูล CPU เครื่องที่รัน โดยเป็น pure Python รองรับทั้ง Python 2 , 3 และใช้ MIT License
ติดตั้งได้ด้วยคำสั่ง pip install py-cpuinfo
การใช้งาน
สามารถเรียกดูรายละเอียดได้ทันทีด้วยคำสั่ง python -m cpuinfo
รับรายละเอียดในโค้ด Python ได้ด้วยคำสั่งตามตัวอย่างนี้
import cpuinfo
info = cpuinfo.get_cpu_info()
print(info)
Output
{'python_version': '3.8.10.final.0 (64 bit)', 'cpuinfo_version': [8, 0, 0],
'cpuinfo_version_string': '8.0.0', 'arch': 'X86_64', 'bits': 64, 'count': 8,
'arch_string_raw': 'AMD64', 'vendor_id_raw': 'GenuineIntel',
'brand_raw': 'Intel(R) Core(TM) i3-10100 CPU @ 3.60GHz',
'hz_advertised_friendly': '3.6000 GHz', 'hz_actual_friendly': '3.6000 GHz',
'hz_advertised': [3600000000, 0], 'hz_actual': [3600000000, 0],
'l2_cache_size': 1048576, 'stepping': 3, 'model': 165, 'family': 6,
'l3_cache_size': 6291456, 'flags': ['3dnow', '3dnowprefetch', 'abm', 'acpi',
'adx', 'aes', 'apic', 'avx', 'avx2', 'bmi1', 'bmi2', 'clflush', 'clflushopt',
'cmov', 'cx16', 'cx8', 'de', 'ds_cpl', 'dtes64', 'dts', 'erms', 'est',
'f16c', 'fma', 'fpu', 'fxsr', 'ht', 'ia64', 'intel_pt', 'invpcid',
'lahf_lm', 'mca', 'mce', 'mmx', 'monitor', 'movbe', 'mpx', 'msr', 'mtrr',
'osxsave', 'pae', 'pat', 'pbe', 'pcid', 'pclmulqdq', 'pdcm', 'pge', 'pni',
'popcnt', 'pse', 'pse36', 'rdrnd', 'rdseed', 'sep', 'serial', 'sgx',
'sgx_lc', 'smap', 'smep', 'ss', 'sse', 'sse2', 'sse4_1', 'sse4_2',
'ssse3', 'tm', 'tm2', 'tsc', 'tscdeadline', 'vme', 'vmx', 'x2apic',
'xsave', 'xtpr'], 'l2_cache_line_size': 256, 'l2_cache_associativity': 6}
อ่านรายละเอียดเพิ่มเติมได้ที่ https://github.com/workhorsy/py-cpuinfo
Reference : https://python3.wannaphong.com/2017/07/cpu-python.html
เล่นเสียง/เพลง MP3
ติดตั้งได้ด้วยคำสั่ง pip install playsound
สามารถเล่นไฟล์ได้ทั้งจากไฟล์และลิงค์จากเว็บ
from playsound import playsound
playsound('เพลง.mp3')
หน้าหลักโมดูล playsound https://github.com/TaylorSMarks/playsound
คำนวณดาราศาสตร์พื้นฐานด้วย PyEphem
PyEphem เป็นโมดูลสำหรับงานคำนวณดาราศาสตร์พื้นฐานในภาษาไพทอน โดยสามารถคำนวณตำแหน่งของดวงอาทิตย์และดวงจันทร์ของโลก รวมไปถึงตำแหน่งของดาวหาง ตามเวลาที่กำหนดได้ และนอกจากนั้น สามารถคำนวณวันเวลาวันพระจันทร์เต็มดวงและดับได้ด้วย และมีความสามารถอื่น ๆ อีก
รองรับทั้ง Python 2 และ Python 3
ใช้ License: LGPL
ติดตั้งได้ด้วยคำสั่ง pip install pyephem
ตัวอย่างการใช้งาน
>>> import ephem
>>> mars = ephem.Mars()
>>> mars.compute('2008/1/1')
>>> print mars.ra, mars.dec
# 5:59:27.35 26:56:27.4
เรามาคำนวณหาวันเวลาพระจันทร์เต็มดวงและดับด้วยกันครับ
import ephem
d1 = ephem.next_full_moon('2017') # คำนวณในปี 2017
print(d1)
d2 = ephem.next_new_moon(d1)
print(d2)
Output
2017/1/12 11:33:58
2017/1/28 00:07:02
อ่านเอกสารการใช้งานได้ที่ http://rhodesmill.org/pyephem/
QR Code PromptPay
Install
pip install pypromptpay
Using
from pypromptpay import qr_code
qr_code(account,one_time=True,path_qr_code="",country="TH",money="",currency="THB")
account is phone number or identification number.
one_time : if you use once than it's True.
path_qr_code : path save file qr code image.
return True (if have path_qr_code) or text (if haven't path_qr_code)
License
Apache Software License 2.0
Develop
Wannaphong Phatthiyaphaibun (wannaphong@kkumail.com)
Reference
แนวนโยบายการใช้มาตรฐาน Thai QR Code ในธุรกรรมการชำระเงิน
# -*- coding: utf-8 -*-
import crc16
import qrcode
def qr_code(account,one_time=True,path_qr_code="",country="TH",money="",currency="THB"):
"""
qr_code(account,one_time=True,path_qr_code="",country="TH",money="",currency="THB")
account is phone number or identification number.
one_time : if you use once than it's True.
path_qr_code : path save qr code.
country : TH
money : money (if have)
currency : THB
"""
Version = "0002"+"01" # เวชั่นของ PromptPay
if one_time == True: # one_time คือ ต้องการให้โค้ดนี้ครั้งเดียวหรือไม่
one_time = "010212" # 12 ใช้ครั้งเดียว
else:
one_time ="010211" # 11 ใช้ได้้หลายครั้ง
if len(account) == 10 or len(account) == 13 :
merchant_account_information = "2937" # ข้อมูลผู้ขาย (เฉพาะเบอร์โทร และ บัตรประชาชน)
else :
merchant_account_information = "2939" # ข้อมูลผู้ขาย (เฉพาะเลขอ้างอิง)
merchant_account_information += "0016"+"A000000677010111" # หมายเลขแอปพลิเคชั่น PromptPay
if len(account) == 10: #ถ้าบัญชีนี้เป็นเบอร์โทร
account = list(account)
merchant_account_information += "011300" # 01 หมายเลขโทรศัพท์ ความยาว 13 ขึ้นต้น 00
if country == "TH":
merchant_account_information += "66" # รหัสประเทศ 66 คือประเทศไทย
del account[0] # ตัดเลข 0 หน้าเบอร์ออก
merchant_account_information += ''.join(account)
elif len(account) == 13 : #ถ้าบัญชีนี้เป็นบัตรประชาชน
merchant_account_information += "0213" + account.replace('-','')
else : #ไม่ใช่เบอร์โทร และ บัตรประชาชน เป็นเลขอ้างอิง
merchant_account_information += "0315" + account + "5303764"
country = "5802" + country # ประเทศ
if currency == "THB":
currency = "5303" + "764" # "764" คือเงินบาทไทย ตาม https://en.wikipedia.org/wiki/ISO_4217
if money != "": # กรณีกำหนดเงิน
check_money = money.split('.') # แยกจาก .
if len(check_money) == 1 or len(check_money[1]) == 1: # กรณีที่ไม่มี . หรือ มีทศนิยมแค่หลักเดียว
money = "54" + "0" + str(len(str(float(money))) + 1) + str(float(money)) + "0"
else:
money = "54" + "0" + str(len(str(float(money)))) + str(float(money)) # กรณีที่มีทศนิยมครบ
check_sum = Version+one_time+merchant_account_information+country+currency+money+"6304" # เช็คค่า check sum
check_sum1 = hex(crc16.crc16xmodem(check_sum.encode('ascii'),0xffff)).replace('0x','')
if len(check_sum1) < 4: # # แก้ไขข้อมูล check_sum ไม่ครบ 4 หลัก
check_sum1 = ("0"*(4-len(check_sum1))) + check_sum1
check_sum += check_sum1
if path_qr_code != "":
img = qrcode.make(check_sum.upper())
imgload = open(path_qr_code,'wb')
img.save(imgload, 'PNG')
imgload.close()
return True
else:
return check_sum.upper() # upper ใช้คืนค่าสตริงเป็นตัวพิมพ์ใหญ่
Reference : https://github.com/wannaphong/pypromptpay