Check and generate passwords

Get an indicative score based on length, character groups and a few easy patterns, or generate a random password. A score cannot confirm that a password has not been exposed.

Password tools

Check or generate a password

Checking and generation run in browser JavaScript.

In-browser processing

Check a password

Indicative score updates as you type

Indicative scoreNot evaluated
0/100

The score uses only a few local rules. It is not a security guarantee or a breached-password check.

  • At least 12 charactersThis tool’s threshold
  • UppercaseA–Z
  • Lowercasea–z
  • Number0–9
  • SymbolFor example ! @ # $
  • No matched sample patternVery small pattern list
Enter a password for suggestions.

Generate a random password

Characters are selected with Web Crypto

18 characters
864

Each character is selected with crypto.getRandomValues().

Check or generate a password in 3 steps

01

Check a candidate or generate one

Enter a candidate to see an indicative score. Use the generator if you need a random password.

Choose the right action

NeedActionKeep in mind
Assess a candidateEnter it in the checkerThe rule-based score does not check breach databases.
Create a new passwordChoose length and character groups, then Generate againUse it for one account and store it in a password manager.

Understand the result before using it

Does a high score guarantee safety?
No. The tool catches only a few common patterns. An exposed, reused or personal-information password may still score highly.
Must every character group be present?
No. These boxes describe this page’s scoring rules, not a universal requirement. Prefer a long, unique, random password.
Why did the generator select a group?
If every group is deselected, the tool reselects lowercase so it can still generate a password.

The 12-character checklist threshold belongs to this tool. NIST sets a 15-character minimum for passwords used as the sole authentication factor; choose a longer password when the service allows it. Source: NIST SP 800-63B.

Data and limits

The checker and generator run in your browser; their code makes no password API request and does not write to localStorage. A web page cannot vouch for your device, extensions or other software. Avoid entering a password used for an important account; use a trusted password manager and enable multifactor authentication where possible.

Comments & feedback

Rate this tool

Loading ratings…

Write a commentNo account needed

Do not share passwords, sensitive information or the contents of files you are processing.

Reviewed before posting. Email stays private.

Embed this tool on your websiteFree · Copy once, receive tool updates automatically

Paste the iframe into HTML, WordPress or any platform that supports embeds. The tool runs in the visitor’s browser; adjust its height and theme as needed.

View the embed guide and supported platforms →

<div style="max-width:900px">
  <iframe data-kitotool-embed src="https://kitotool.com/embed/en/password-checker/" title="Password Checker — KitoTool" width="100%" height="1050" style="display:block;width:100%;border:1px solid #dbe3ee;border-radius:12px" loading="lazy" referrerpolicy="strict-origin-when-cross-origin"></iframe>
  <p style="margin:6px 2px 0;text-align:right;font:12px/1.5 system-ui,sans-serif;color:#64748b">Free tool by <a href="https://kitotool.com/en/password-checker/" target="_blank" rel="nofollow noopener noreferrer" style="color:#2359d4;text-decoration:underline">KitoTool</a></p>
</div>

The code includes a visible credit below the iframe; its link uses nofollow for a widely distributed widget.

Optional: automatically resize the iframe

Add this script once to the page containing the iframe.

<script>
(function(){var origin="https://kitotool.com";function frames(){return document.querySelectorAll("iframe[data-kitotool-embed]")}function measure(f){if(f.contentWindow&&new URL(f.src).origin===origin)f.contentWindow.postMessage({type:"kitotool:measure"},origin)}window.addEventListener("message",function(e){if(e.origin!==origin||!e.data||e.data.type!=="kitotool:resize"||!Number.isFinite(e.data.height))return;frames().forEach(function(f){if(f.contentWindow===e.source&&new URL(f.src).origin===origin)f.style.height=Math.max(320,Math.min(12000,Math.ceil(e.data.height)))+"px";});});function connect(){frames().forEach(function(f){f.addEventListener("load",function(){measure(f)});measure(f)})}if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",connect,{once:true});else connect()})();
</script>