கணினி, பைத்தான்

பைத்தான் ரிஜெக்ஸ் 5 – கடவுச்சொல்லைக் கண்டுபிடிப்பது எப்படி?

கடவுச்சொல் எழுதுவதில் பல்வேறு கட்டுப்பாடுகளைத் தளங்களில் கொடுத்திருப்பார்கள். சிலர் எட்டெழுத்துகளாவது குறைந்தது இருக்க வேண்டும் என்பார்கள். சிலர், கட்டாயம் எண்கள் கலந்திருக்க வேண்டும் என்று சொல்வார்கள். சிலர், பெரிய எழுத்தும் சின்ன எழுத்தும் கலந்திருக்க வேண்டும் என்பார்கள். சிலர் மேலே சொன்ன எல்லாமே இருக்க வேண்டும் என்று வற்புறுத்துவார்கள். இவற்றிற்குரிய பைத்தான் நிரல் எழுதுவது எப்படி? ரிஜெக்சில் அதை எப்படிச் செய்வது? பார்ப்போமா!

முதலில், கடவுச்சொல்லுக்குரிய கட்டுப்பாடுகளை வகைப்படுத்தி விடுவோம்.
1. குறைந்தது எட்டு எழுத்துகள்.
if len(password)<8:
print(“Password should have 8 characters”)
2. கட்டாயம் சின்ன எழுத்துகள் இருக்க வேண்டும்.
re.search(“[a-z]”, password)
இங்கு [] க்குள் இருக்கும் a-z என்பது aஇல் இருந்து z வரை இருக்கும் சின்ன எழுத்துகளில் எவை வேண்டுமானாலும் இருக்கலாம் என்பதைச் சொல்கிறது.
3. கட்டாயம் பெரிய எழுத்துகள் இருக்க வேண்டும்.
re.search(“[A-Z]”, password)
4. எண்களும் கட்டாயம் இருக்க வேண்டும்.
re.search(“[A-Z]”, password)

இப்போது இந்த நான்கு கட்டுப்பாடுகளும் சேர்த்து எழுதினால் நம்முடைய நிரலை முடித்து விடலாம்.

import re  # 1 re moduleஐ இறக்கிக் கொண்டோம். 
def passwordChecker(password): 
	if len(password)<8: #4: நீளம் அளக்கப்படுகிறது.  
		print("Password should have 8 characters")
	else: # பெரிய எழுத்து,சிறிய எழுத்து, எண்கள் பார்க்கப்படுகின்றன.  
		if re.search("[a-z]", password) and re.search("[A-Z]",password) and re.search("[0-9]", password):
			print("Strong Password")
		else:
			print("Password should have both upper and lower characters and has at least one digit")


password = input("Enter password: ") #படி 2: கடவுச்சொல் வாங்குகிறோம்.  
passwordChecker(password) #படி 3: சரியான கடவுச்சொல்லா பார்க்கப் போகிறோம்.

password = input(“Enter password: “) #படி 2: கடவுச்சொல் வாங்குகிறோம்.
passwordChecker(password) #படி 3: சரியான கடவுச்சொல்லா பார்க்கப் போகிறோம்.

கடவுச்சொல், சரியான வடிவத்தில் இருக்கிறதா என்னும் ரிஜெக்ஸ் நிரலை இப்போது கற்றுக் கொண்டோம். இன்னும் வரும் நாட்களில் வேறு சில ரிஜெக்ஸ் அடிப்படைகளையும் தொடர்ந்து படிப்போம்.

Standard
கணினி

பைத்தான் ரிஜெக்ஸ் – 4 – தேதியை உறுதிப்படுத்துவது எப்படி?

இதற்கு முன்பு, தொலைபேசி எண்கள், அலைபேசி எண்கள் ஆகியவற்றை எப்படிச் சோதிப்பது என்று பார்த்துவிட்டோம். இப்போது நம் முன்னால் உள்ள கேள்வி – ஒரு தேதி – சரியான தேதி என்று தான் பைத்தான் ரிஜெக்ஸ் மூலம் எப்படி உறுதிப்படுத்துவது என்பதைத் தான்!  தேதியை எப்படி எழுதுவோம் – பொதுவாக நாள்/மாதம்/ஆண்டு என்பதை, dd/mm/yyyy எனும் பொது வடிவத்தில் எழுதுவோம் அல்லவா! அதாவது முதலில் இரண்டு எண்கள்(தேதிக்கு), பிறகு இரண்டு எண்கள்(மாதத்திற்கு), பிறகு நான்கு எண்கள்(ஆண்டுக்கு) என்பது புரிகிறது அல்லவா! இதை எப்படி ரிஜெக்ஸ் மூலம் எழுதுவது?
import re
datePattern = re.compile(r'(\d){2}/(\d){2}/\d{4}’)
\d என்பது எண்ணைக் குறிக்கும் என்பதும் {2} என்பது எத்தனை எண்கள் என்பதைக் குறிக்கும் என்பதெல்லாம் இந்தத் தொடரைத் தொடர்ந்து வரும் உங்களுக்குத் தெரிந்தது தான்! இப்போது தேதி, மாதம், ஆண்டு என்று ஒவ்வொன்றாகப் பார்ப்போமா!

தேதி: 1இல் இருந்து 31 வரை இருக்கலாம். அதாவது, தேதிக்குரிய இரண்டு இலக்கங்களில் முதல் இலக்கத்தில் 0,1,2,3 ஆகிய எண்களும் இரண்டாவது இலக்கத்தில் 0இல் இருந்து 9 வரை வரலாம். இதை எப்படி எழுதுவது? [0-3][0-9] சரிதானே!

மாதம்: 1இல் இருந்து 12 வரை இருக்கலாம். அதாவது, முதல் இலக்கம் 0 அல்லது 1, இரண்டாவது இலக்கம் 0 முதல் 9 வரை. இதை எப்படி எழுதுவது – [0-1][0-9] என்று எழுதி விடலாம்.

ஆண்டு: நான்கு எண்கள் – நேரடியாகவே (\d){4} என்று எழுதிவிடலாம்.

இந்த மூன்றையும் சேர்த்து எழுதினால்,
datePattern = re.compile(r'([0-3][0-9])/([0-1][0-9])/((\d){4})’) என்று எழுதி விடலாம். இதன் பிறகான பகுதிகள், முன்பு நாம் எழுதியது போலவே, நாம் கொடுக்கும் வாக்கியத்தில் தேதி இருக்கிறதா என்று தேடி (search) விடலாம்.
dateFound = datePattern.search(‘My birthdate is 28/02/1985’)  இப்போது இந்தத் தேதியை அச்சிட்டுப் பார்க்க,
print(dateFound.groups()) என்று கொடுத்து விடலாம்.

இப்போது தான், அடுத்த சிக்கல் தொடங்குகிறது. என்ன சிக்கல் என்கிறீர்களா? தேதியைப் பொத்தாம் பொதுவாக, 31 வரை வரும் என்று சொல்லி விட முடியாதே! சில மாதங்களில் 30 நாட்கள் இருக்கும், சில மாதங்களில் 31 நாட்கள் இருக்கும், பிப்ரவரியில் 28 நாட்களும் இருக்கலாம், 29 நாட்களும் இருக்கலாம். அப்படியானால் ஒரு தேதி, சரியான தேதியா என்று பார்க்க, மாதம் என்ன என்று தெரிய வேண்டும். பிப்ரவரியில் 29 நாட்கள் இருக்க, ஆண்டு என்ன என்று தெரியவேண்டும் அல்லவா? அப்படியானால் இப்போது என்ன செய்யலாம்? நம்மிடம் மொத்தமாகத் தேதி/மாதம்/ஆண்டு இருக்கிறது. இதை உடைத்து, தேதியைத் தனியாக எடுக்க வேண்டும். அதை மாதத்தின் எண்ணுடன் ஒப்பிட வேண்டும். மாதத்துடன் ஒப்பிடும்போது இரண்டாவது மாதமாக (பிப்ரவரியாக) இருந்தால், ஆண்டு – லீப் ஆண்டா இல்லையா என்பதை உறுதிப்படுத்த வேண்டும்.

எப்படிச் செய்வது?
மாதங்கள் 1, 3, 5, 7, 8, 10, 12 எண்களில் இருந்தால் 31ஆம் நாள் வரை வரலாம். 31க்கு மேல் இருக்கக்கூடாது.
if int(month) in [1,3,5,7,8,10,12]:
if int(day)>31:
print(“Invalid Date, please check”)
மாதங்கள் 4, 6, 9, 11 எண்களில் இருந்தால் 30ஆம் நாள் வரை வரலாம். 30க்கு மேல் இருக்கக்கூடாது.
elif int(month) in [4,6,9,11]:
if int(day)>30:
print(“Invalid Date, please check”)
மாதம் 2 என்று இருந்தால், நாள் 28 வரை வரலாம். 29 என்று வந்தால், ஆண்டு லீப்பாண்டா எனப் பார்க்க வேண்டும்.
else:
if int(day)>29:
print(“Invalid Date, please check”)
elif int(day)==29:
y = int(year)
if not (((y%4)==0) and ((y%100)==0) and ((y%400)==0)):
print(“Invalid Date, please check”)

இந்த மூன்று வரிகளையும் சேர்த்து எழுதினால், நம்முடைய வேலை முடிந்தது. செய்வோமா!

நிரல்:

import re 
datePattern = re.compile(r'([0-3][0-9])/([0-1][0-2])/((\d){4})')
dateFound = datePattern.search('My birthdate is 31/09/2000')
if not dateFound is None:
    print(dateFound.groups())
    day = dateFound.group(1)
    month = dateFound.group(2).strip("0") # strip என்ன செய்யும் என்று கொஞ்சம் சிந்தியுங்களேன்.  
    year = dateFound.group(3)
    print(day, month, year)
    if int(month) in [1,3,5,7,8,10,12]:
	    if int(day)>31:
	    	print("Invalid Date, Date can't be greater than 31")
    elif int(month) in [4,6,9,11]:
	    if int(day)>30:
	    	print("Invalid Date, Date can't be greater than 30")
    else:
	    if int(day)>29:
	    	print("Invalid Date, Date can't be greater than 29")
	    elif int(day)==29:
		    y = int(year)
		    if not (((y%4)==0) and ((y%100)==0) and ((y%400)==0)):
		    	print("Invalid Date, Date can't be greater than 28")
else:
    print("Invalid Date")

இந்த நிரல் உங்களுக்குப் புரிந்திருக்கும் என்று நம்புகிறேன். இன்னும் அடுத்த பதிவில் வேறு சில ரிஜெக்ஸ் நிரல்கள் பார்க்கலாம்.

Standard