在落伍者论坛看"给你网站的注册项中增加"密码强度" 来托出网站的亲和力"
无聊一下也放在自己的论坛的注册页面上....下面修改仅供参考!
演示:http://bbs.yinyuegame.com/register.php (自己注册试试)
1.将以下代码保存为 pswdplc.js 放在include文件中
- var kNoCanonicalCounterpart = 0;
- var kCapitalLetter = 0;
- var kSmallLetter = 1;
- var kDigit = 2;
- var kPunctuation = 3;
- var kAlpha = 4;
- var kCanonicalizeLettersOnly = true;
- var kCananicalizeEverything = false;
- var gDebugOutput = null;
- var kDebugTraceLevelNone = 0;
- var kDebugTraceLevelSuperDetail = 120;
- var kDebugTraceLevelRealDetail = 100;
- var kDebugTraceLevelAll = 80;
- var kDebugTraceLevelMost = 60;
- var kDebugTraceLevelFew = 40;
- var kDebugTraceLevelRare = 20;
- var gDebugTraceLevel = kDebugTraceLevelNone;
- function DebugPrint()
- {
- var string = "";
- if (gDebugTraceLevel && gDebugOutput &&
- DebugPrint.arguments && (DebugPrint.arguments.length > 1) && (DebugPrint.arguments[0] <= gDebugTraceLevel))
- {
- for(var index = 1; index < DebugPrint.arguments.length; index++)
- {
- string += DebugPrint.arguments[index] + " ";
- }
- string += "<br>\n";
- gDebugOutput(string);
- }
- }
- function CSimilarityMap()
- {
- this.m_elements = "";
- this.m_canonicalCounterparts = "";
- }
- function SimilarityMap_Add(element, canonicalCounterpart)
- {
- this.m_elements += element;
- this.m_canonicalCounterparts += canonicalCounterpart;
- }
- function SimilarityMap_Lookup(element)
- {
- var canonicalCounterpart = kNoCanonicalCounterpart;
- var index = this.m_elements.indexOf(element);
- if (index >= 0)
- {
- canonicalCounterpart = this.m_canonicalCounterparts.charAt(index);
- }
- else
- {
- }
- return canonicalCounterpart;
- }
- function SimilarityMap_GetCount()
- {
- return this.m_elements.length;
- }
- CSimilarityMap.prototype.Add = SimilarityMap_Add;
- CSimilarityMap.prototype.Lookup = SimilarityMap_Lookup;
- CSimilarityMap.prototype.GetCount = SimilarityMap_GetCount;
- function CDictionaryEntry(length, wordList)
- {
- this.m_length = length;
- this.m_wordList = wordList;
- }
- function DictionaryEntry_Lookup(strWord)
- {
- var fFound = false;
- if (strWord.length == this.m_length)
- {
- var nFirst = 0;
- var nLast = this.m_wordList.length - 1;
- while( nFirst <= nLast )
- {
- var nCurrent = Math.floor((nFirst + nLast)/2);
- if( strWord == this.m_wordList[nCurrent])
- {
- fFound = true;
- break;
- }
- else if ( strWord > this.m_wordList[nCurrent])
- {
- nLast = nCurrent - 1;
- }
- else
- {
- nFirst = nCurrent + 1;
- }
- }
- }
- return fFound;
- }
- CDictionaryEntry.prototype.Lookup = DictionaryEntry_Lookup;
- function CDictionary()
- {
- this.m_entries = new Array()
- }
- function Dictionary_Lookup(strWord)
- {
- for (var index = 0; index < this.m_entries.length; index++)
- {
- if (this.m_entries[index].Lookup(strWord))
- {
- return true;
- }
- }
- }
- function Dictionary_Add(length, wordList)
- {
- var iL=this.m_entries.length;
- var cD=new CDictionaryEntry(length, wordList)
- this.m_entries[iL]=cD;
- }
- CDictionary.prototype.Lookup = Dictionary_Lookup;
- CDictionary.prototype.Add = Dictionary_Add;
- var gSimilarityMap = new CSimilarityMap();
- var gDictionary = new CDictionary();
- function CharacterSetChecks(type, fResult)
- {
- this.type = type;
- this.fResult = fResult;
- }
- function isctype(character, type, nDebugLevel)
- {
- var fResult = false;
- switch(type)
- {
- case kCapitalLetter:
- if((character >= 'A') && (character <= 'Z'))
- {
- fResult = true;
- }
- break;
- case kSmallLetter:
- if ((character >= 'a') && (character <= 'z'))
- {
- fResult = true;
- }
- break;
- case kDigit:
- if ((character >= '0') && (character <= '9'))
- {
- fResult = true;
- }
- break;
- case kPunctuation:
- if ("!@#$%^&*()_+-='";:[{]}\|.>,</?`~".indexOf(character) >= 0)
- {
- fResult = true;
- }
- break;
- case kAlpha:
- if (isctype(character, kCapitalLetter) || isctype(character, kSmallLetter))
- {
- fResult = true;
- }
- break;
- default:
- break;
- }
- return fResult;
- }
- function CanonicalizeWord(strWord, similarityMap, fLettersOnly)
- {
- var canonicalCounterpart = kNoCanonicalCounterpart;
- var strCanonicalizedWord = "";
- var nStringLength = 0;
- if ((strWord != null) && (strWord.length > 0))
- {
- strCanonicalizedWord = strWord;
- strCanonicalizedWord = strCanonicalizedWord.toLowerCase();
- if (similarityMap.GetCount() > 0)
- {
- nStringLength = strCanonicalizedWord.length;
- for(var index = 0; index < nStringLength; index++)
- {
- if (fLettersOnly && !isctype(strCanonicalizedWord.charAt(index), kSmallLetter, kDebugTraceLevelSuperDetail))
- {
- continue;
- }
- canonicalCounterpart = similarityMap.Lookup(strCanonicalizedWord.charAt(index));
- if (canonicalCounterpart != kNoCanonicalCounterpart)
- {
- strCanonicalizedWord = strCanonicalizedWord.substring(0, index) + canonicalCounterpart +
- strCanonicalizedWord.substring(index + 1, nStringLength);
- }
- }
- }
- }
- return strCanonicalizedWord;
- }
- function IsLongEnough(strWord, nAtLeastThisLong)
- {
- if ((strWord == null) || isNaN(nAtLeastThisLong))
- {
- return false;
- }
- else if (strWord.length < nAtLeastThisLong)
- {
- return false;
- }
- return true;
- }
- function SpansEnoughCharacterSets(strWord, nAtLeastThisMany)
- {
- var nCharSets = 0;
- var characterSetChecks = new Array(
- new CharacterSetChecks(kCapitalLetter, false),
- new CharacterSetChecks(kSmallLetter, false),
- new CharacterSetChecks(kDigit, false),
- new CharacterSetChecks(kPunctuation, false)
- );
- if ((strWord == null) || isNaN(nAtLeastThisMany))
- {
- return false;
- }
- for(var index = 0; index < strWord.length; index++)
- {
- for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++)
- {
- if (!characterSetChecks[nCharSet].fResult && isctype(strWord.charAt(index), characterSetChecks[nCharSet].type, kDebugTraceLevelAll))
- {
- characterSetChecks[nCharSet].fResult = true;
- break;
- }
- }
- }
- for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++)
- {
- if (characterSetChecks[nCharSet].fResult)
- {
- nCharSets++;
- }
- }
- if (nCharSets < nAtLeastThisMany)
- {
- return false;
- }
- return true;
- }
- function FoundInDictionary(strWord, similarityMap, dictionary)
- {
- var strCanonicalizedWord = "";
- if((strWord == null) || (similarityMap == null) || (dictionary == null))
- {
- return true;
- }
- strCanonicalizedWord = CanonicalizeWord(strWord, similarityMap, kCanonicalizeLettersOnly);
- if (dictionary.Lookup(strCanonicalizedWord))
- {
- return true;
- }
- return false;
- }
- function IsCloseVariationOfAWordInDictionary(strWord, threshold, similarityMap, dictionary)
- {
- var strCanonicalizedWord = "";
- var nMinimumMeaningfulMatchLength = 0;
- if((strWord == null) || isNaN(threshold) || (similarityMap == null) || (dictionary == null))
- {
- return true;
- }
- strCanonicalizedWord = CanonicalizeWord(strWord, similarityMap, kCananicalizeEverything);
- nMinimumMeaningfulMatchLength = Math.floor((threshold) * strCanonicalizedWord.length);
- for (var nSubStringLength = strCanonicalizedWord.length; nSubStringLength >= nMinimumMeaningfulMatchLength; nSubStringLength--)
- {
- for(var nSubStringStart = 0; (nSubStringStart + nMinimumMeaningfulMatchLength) < strCanonicalizedWord.length; nSubStringStart++)
- {
- var strSubWord = strCanonicalizedWord.substr(nSubStringStart, nSubStringLength);
- if (dictionary.Lookup(strSubWord))
- {
- return true;
- }
- }
- }
- return false;
- }
- function ClientSideStrongPassword()
- {
- return (IsLongEnough(ClientSideStrongPassword.arguments[0], "7") &&
- SpansEnoughCharacterSets(ClientSideStrongPassword.arguments[0], "3") &&
- (!(IsCloseVariationOfAWordInDictionary(ClientSideStrongPassword.arguments[0], "0.6",
- ClientSideStrongPassword.arguments[1], ClientSideStrongPassword.arguments[2]))));
- }
- function ClientSideMediumPassword()
- {
- return (IsLongEnough(ClientSideMediumPassword.arguments[0], "7") &&
- SpansEnoughCharacterSets(ClientSideMediumPassword.arguments[0], "2") &&
- (!(FoundInDictionary(ClientSideMediumPassword.arguments[0], ClientSideMediumPassword.arguments[1],
- ClientSideMediumPassword.arguments[2]))));
- }
- function ClientSideWeakPassword()
- {
- return (IsLongEnough(ClientSideWeakPassword.arguments[0], "6") ||
- (!(IsLongEnough(ClientSideWeakPassword.arguments[0], "0"))));
- }
- function GEId(sID){return document.getElementById(sID);}
- function EvalPwdStrength(oF,sP){PadPasswd(oF,sP.length*2);if(ClientSideStrongPassword(sP,gSimilarityMap,gDictionary)){DispPwdStrength(3,'css0165');}else if(ClientSideMediumPassword(sP,gSimilarityMap,gDictionary)){DispPwdStrength(2,'css0164');}else if(ClientSideWeakPassword(sP,gSimilarityMap,gDictionary)){DispPwdStrength(1,'css0163');}else{DispPwdStrength(0,'css0162');}}function SetPwdStrengthEx(oF,sP){EvalPwdStrength(oF,sP);if(ClientSideStrongPassword(sP,gSimilarityMap,gDictionary)){document.cookie="pwdstrength=3";}else if(ClientSideMediumPassword(sP,gSimilarityMap,gDictionary)){document.cookie="pwdstrength=2";}else if(ClientSideWeakPassword(sP,gSimilarityMap,gDictionary)){document.cookie="pwdstrength=1";}else{document.cookie="pwdstrength=0";}}function SetPwdStrength(sP,oF){if(ClientSideStrongPassword(sP,gSimilarityMap,gDictionary)){oF.value = 3;}else if(ClientSideMediumPassword(sP,gSimilarityMap,gDictionary)){oF.value = 2;}else if(ClientSideWeakPassword(sP,gSimilarityMap,gDictionary)){oF.value = 1;}else{oF.value = 0;}}function XPWCont(){if (typeof(parent.opener.RegistrationFinishedCallback)!="undefined"){parent.opener.RegistrationFinishedCallback();}parent.close();}function OnSigninSubmit(oF){if(g_fAS){return false;}if(typeof oF!="object"){return false;}var bL=true,bP=true,bI=true,bH=true;bL=Val(oF.login);var sEM=oF.login.value;bL=ValEM(sEM);if(typeof oF.passwd=="object"){bP=Val(oF.passwd);}if(typeof oF.pin=="object"){bI=Val(oF.pin);}if(typeof oF.HIPSolution=="object"){bH=Val(oF.HIPSolution);}if(!bL||!bP||!bI||!bH){var fSF=true;var aE=["i0518","i0519","i0512","i0527","i0545","i0562","i0517"];HDivs(aE);if(!bL){fSF=SwErr("i0519",oF.login,fSF)};if(!bI){fSF=SwErr("i0527",oF.pin,fSF)};if(!bH){fSF=SwErr("i0517",oF.HIPSolution,fSF)};if(!bP){fSF=SwErr("i0512",oF.passwd,fSF)};return false;}if(typeof oF.passwd=="object"){PadPasswd(oF,oF.passwd.value.length);}if(typeof g_DO!="undefined"){var dom=sEM.substr(sEM.indexOf('@')+1);var sU=g_DO[dom.toLowerCase()];if(sU){oF.action=sU;}}if(typeof g_QS!="undefined"){if(g_QS){var sS="&";if(oF.action.indexOf('?')==-1){sS="?";}if(oF.action.indexOf(g_QS)==-1){oF.action+=sS+g_QS;}}}g_fAS=true;oF.login.value=oF.login.value.toLowerCase();oF.submit();return false;}function OnPadSubmit(oF){if(typeof oF.CurrPW=="object"){PadPasswd(oF,oF.CurrPW.value.length);}oF.submit();return false;}function OnPadSubmitWithAction(oF,szU){if(typeof oF.CurrPW=="object"){PadPasswd(oF,oF.CurrPW.value.length);}return OnSubmitWithAction(oF,szU);}function PadPasswd(oF,lPwd){if(typeof oF.PwdPad=="object"){var sPad="IfYouAreReadingThisYouHaveTooMuchFreeTime";var lPad=sPad.length-lPwd;oF.PwdPad.value=sPad.substr(0,(lPad<0)?0:lPad);}}function HDivs(aE){for(var i=0;i<aE.length;++i){var o=GEId(aE[i]);if(o){o.style.display="none";}}}function SwErr(sID,oFN,fSF){GEId(sID).style.display="block";if(fSF){oFN.focus();oFN.select();}return false;
- }
复制代码
2.查找templates\default\register.htm
- <td class="altbg1">{lang password}:</td>
- <td class="altbg2"><input type="password" name="password" size="25"
复制代码
后面加上
- onkeyup="javascript:SetPwdStrengthEx(document.forms[0],this.value);"
复制代码
3.查找templates\default\register.htm
- <tr>
- <td class="altbg1">{lang password_confirm}:</td>
复制代码
前面加上
- <tr>
- <script type="text/javascript" src="include/pswdplc.js"></script>
- <script type="text/javascript">
- function DispPwdStrength(iN,sHL)
- { if(iN>3){ iN=3;}for(var i=0;i<4;i++){ var sHCR="css0162";if(i<=iN){ sHCR=sHL;}if(i>0){ GEId("idSM"+i).className=sHCR;}GEId("idSMT"+i).style.display=((i==iN)?"inline":"none");}}
- </script>
- <td class="altbg1">密码强度:</td>
- <td class="altbg2"><table style="width: 255px; height: 20px;" cellpadding="0" cellspacing="0"><tbody><tr><td id="idSM1" style="background-color:#EBEBEB;border-right:solid 1px #BEBEBE;border-bottom:solid 1px #BEBEBE;" align="center" width="33%"><span style="font-size: 1px;"> </span><span id="idSMT1" style="display: none; color:#FF0000">弱</span></td><td id="idSM2" style="background-color:#EBEBEB;border-right:solid 1px #BEBEBE;border-bottom:solid 1px #BEBEBE;" align="center" width="34%"><span style="font-size: 1px;"> </span><span id="idSMT0" style="display: inline; font-weight: normal; color:#6633FF">未能评级</span><span id="idSMT2" style="display: none; color:#FF9900">中</span></td><td id="idSM3" style="background-color:#EBEBEB;border-right:solid 1px #BEBEBE;border-bottom:solid 1px #BEBEBE;" align="center" width="33%"><span style="font-size: 1px;"> </span><span id="idSMT3" style="display: none; color:#339900">强</span></td></tr></tbody></table></td>
- </tr>
复制代码
此密码强度乃彷MSN密码强度....希望有更强的彷google等等!
[ 本帖最后由 谨少爷 于 2005-12-12 19:37 编辑 ] |