روبیکا من : https://rubika.ir/artinkarimian3 سایت من : https://sites.google.com/view/artin-karimian
پروژه اول با پایتون : ردیابی شماره موبایل

خب این پروژه چی کاری میکند ؟
این پروژه یک شاهکاری است که با وارد کردن شماره داخل برنامه کشور شماره و ارائه کننده تلفن آن را به شما میدهد .
برنامه هایی که نیاز دارید :
1-خود پایتون
2-کتابخانه messagebox
3-کتابخانه phonenumbers

کتابخانه های نیاز را نصب کنید و کد زیر را در پایتون وارد کنید.
import tkinter as tk
from tkinter import messagebox
# فرض میکنیم کتابخانههای phonenumbers نصب شده باشند
# اگر نصب نیستند، با دستور pip install phonenumbers در ترمینال نصب کنید.
try:
from phonenumbers import parse, geocoder, carrier
except ImportError:
ح print("کتابخانه phonenumbers یافت نشد. لطفاً با دستور pip install phonenumbers آن را نصب کنید.")
# در اینجا میتوانید یک پنجره خطا نمایش دهید یا برنامه را متوقف کنید.
exit()
# --- تابع برای اعتبارسنجی ورود اعداد و علامت + برای کد کشور ---
def validate_country_code_input(P):
# P: مقدار فعلی فیلد ورودی
# اجازه ورود عدد، علامت '+' و رشته خالی
if P.isdigit() or P == "" or P == "+":
return True
# اجازه ورود '+' فقط در ابتدای رشته
elif P.startswith("+") and P[1:].isdigit():
return True
else:
return False
# --- تابع برای اعتبارسنجی ورود اعداد برای شماره تلفن ---
def validate_numeric_input(P):
if P.isdigit() or P == "":
return True
else:
return False
# --- تابع برای پردازش شماره تلفن ---
def show_phone_info():
country_code_entry_text = entry_country_code.get().strip()
phone_number_part = entry_phone_number.get().strip()
# بررسی ورودی کد کشور
if not country_code_entry_text:
messagebox.showwarning("ورودی ناقص", "لطفاً کد کشور را وارد کنید.")
return
# اطمینان از اینکه کد کشور با '+' شروع میشود یا به آن اضافه میکنیم
if not country_code_entry_text.startswith('+'):
country_code_str = "+" + country_code_entry_text
else:
country_code_str = country_code_entry_text
# بررسی عددی بودن قسمت بعد از '+'
if len(country_code_str) > 1 and not country_code_str[1:].isdigit():
messagebox.showwarning("ورودی نامعتبر", "کد کشور باید فقط شامل اعداد (و علامت '+' در ابتدا) باشد.")
return
if len(country_code_str) == 1 and country_code_str == "+": # فقط '+' وارد شده
messagebox.showwarning("ورودی نامعتبر", "لطفاً کد کشور را کامل وارد کنید.")
return
# بررسی ورودی شماره تلفن
if not phone_number_part:
messagebox.showwarning("ورودی ناقص", "لطفاً شماره تلفن را وارد کنید.")
return
if not phone_number_part.isdigit():
messagebox.showwarning("ورودی نامعتبر", "شماره تلفن باید فقط شامل اعداد باشد.")
return
full_phone_number_str = country_code_str + phone_number_part
try:
parsed_number = parse(full_phone_number_str)
# برای نمایش موقعیت مکانی و اپراتور به زبان فارسی، میتوانید از 'fa' استفاده کنید
# اما کتابخانه phonenumbers ممکن است پشتیبانی کامل فارسی برای این بخشها نداشته باشد.
# در صورت نیاز به پشتیبانی کامل فارسی، باید از منابع دیگری استفاده کرد.
location = geocoder.description_for_number(parsed_number, 'en') # 'en' برای سازگاری بهتر
operator = carrier.name_for_number(parsed_number, 'en') # 'en' برای سازگاری بهتر
location_display = location if location else "موقعیت مکانی یافت نشد"
operator_display = operator if operator else "اپراتور یافت نشد"
# نمایش نتیجه به فارسی
result_text = f"شماره کامل: {full_phone_number_str}\n" \
f"موقعیت مکانی: {location_display}\n" \
f"اپراتور: {operator_display}"
label_result.config(text=result_text, fg="blue")
# غیرفعال کردن فیلدها و دکمه نمایش
entry_country_code.config(state=tk.DISABLED)
entry_phone_number.config(state=tk.DISABLED)
button_show_info.config(state=tk.DISABLED)
button_enter_new.config(state=tk.NORMAL) # فعال کردن دکمه ورود مجدد
except Exception as e:
# نمایش خطا به فارسی
messagebox.showerror("خطا", f"خطا در پردازش شماره: {e}\nلطفاً فرمت شماره را بررسی کنید.")
label_result.config(text="خطا در پردازش.", fg="red")
# --- تابع برای ورود مجدد اطلاعات ---
def enter_new_number():
label_result.config(text="", fg="black")
# فعال کردن فیلدها و دکمه نمایش
entry_country_code.config(state=tk.NORMAL)
entry_phone_number.config(state=tk.NORMAL)
button_show_info.config(state=tk.NORMAL)
button_enter_new.config(state=tk.DISABLED) # غیرفعال کردن دکمه ورود مجدد
# پاک کردن ورودیها
entry_country_code.delete(0, tk.END)
entry_phone_number.delete(0, tk.END)
# --- تنظیمات پنجره اصلی ---
root = tk.Tk()
root.title("بررسی اطلاعات شماره تلفن")
root.geometry("400x350") # کمی بلندتر برای جا دادن ورودی کد کشور
root.resizable(False, False)
# --- فریم اصلی ---
main_frame = tk.Frame(root, padx=10, pady=10)
main_frame.pack(expand=True, fill=tk.BOTH)
# --- بخش کد کشور ---
label_country_code = tk.Label(main_frame, text="کد کشور:", font=('Arial', 10, 'bold'))
label_country_code.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
# فیلد ورودی برای کد کشور - استفاده از تابع اعتبارسنجی جدید
vcmd_country = (root.register(validate_country_code_input), '%P')
entry_country_code = tk.Entry(main_frame, width=10, font=('Arial', 10), validate='key', validatecommand=vcmd_country)
entry_country_code.grid(row=0, column=1, padx=5, pady=5, sticky=tk.W) # چسبیده به چپ
# --- فیلد شماره تلفن ---
label_phone_number = tk.Label(main_frame, text="شماره تلفن:", font=('Arial', 10, 'bold'))
label_phone_number.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
# فیلد ورودی برای شماره تلفن
vcmd_phone = (root.register(validate_numeric_input), '%P')
entry_phone_number = tk.Entry(main_frame, width=25, font=('Arial', 10), validate='key', validatecommand=vcmd_phone)
entry_phone_number.grid(row=1, column=1, padx=5, pady=5, sticky=tk.W) # چسبیده به چپ
# --- دکمه ها ---
button_show_info = tk.Button(main_frame, text="نمایش اطلاعات", command=show_phone_info, font=('Arial', 10, 'bold'), bg='#4CAF50', fg='white')
button_show_info.grid(row=2, column=0, columnspan=2, padx=5, pady=10, sticky="ew")
button_enter_new = tk.Button(main_frame, text="ورود مجدد اطلاعات", command=enter_new_number, state=tk.DISABLED, font=('Arial', 10), bg='#2196F3', fg='white')
button_enter_new.grid(row=3, column=0, columnspan=2, padx=5, pady=5, sticky="ew")
# --- لیبل نمایش نتیجه ---
label_result = tk.Label(main_frame, text="", justify=tk.LEFT, wraplength=350, font=('Arial', 11, 'italic'))
label_result.grid(row=4, column=0, columnspan=2, padx=5, pady=10, sticky=tk.W)
# تنظیمات grid برای چیدمان بهتر
main_frame.grid_rowconfigure(0, weight=1)
main_frame.grid_rowconfigure(1, weight=1)
main_frame.grid_rowconfigure(2, weight=1)
main_frame.grid_rowconfigure(3, weight=1)
main_frame.grid_rowconfigure(4, weight=2)
main_frame.grid_columnconfigure(0, weight=1)
main_frame.grid_columnconfigure(1, weight=2)
root.mainloop()

خب کد را اجرا کنید و صفحه بالا را میبینید الان اگر اطلاعات را وارد کنید عکس زیر را میبینید .

دیدید که زد مال ایران هست و اپراتور ایرانسل هست .
برای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .
اگر ایده یا پروژه ای دیگری میخواهید در نظر ها بنویسید .
مطلبی دیگر از این انتشارات
ساخت بازی مار در NOTEPAD در ۲ دقیقه
مطلبی دیگر از این انتشارات
پروژه سوم : تولید کننده رمز عبور قوی
مطلبی دیگر از این انتشارات
راهنمای جامع ورود به شغل برنامه نویس؛ هر آنچه که کارجویان باید بدانند