I was reading this question about fraud committed by printing and cashing checks and the thought occurred to me that is should be trivial to prevent such scams. There are many ways that this could be done, but the one that would require least change would be to simply not make cheque numbers sequential but pseudorandom. This would allow the bank to check that a particular cheque number was issued to a particular account and had not previously been used. By choosing an appropriate number of digits for this value the chance of a clash could be reduced as much as required.

Why has no such method been implemented?

  • Comments are not for extended discussion; this conversation has been moved to chat. – JohnFx Jan 19 at 14:48
  • 2
    I just want to point out that this is really two different questions, and is therefore soliciting two different kinds of answers. You are asking, "Why hasn't a problem been solved yet when it seems easy to solve?" And also, "What's your opinion of this potential solution to the problem?" IMHO the (best) answer to the first question renders the second question moot. – TTT Jan 19 at 16:16

Why are cheques so insecure?

Short answer: because banks bear the risk of check fraud, and any wholesale change in the check payment system is very complicated and expensive.

Instead they work to reduce the use of checks by introducing novel electronic payment systems and take what steps they can to mitigate check fraud.

The check is the original cashless payment system. It's old and simple to implement. In its simplest form it allows a cashless payment between parties with only a single bank. The recipient of the check simply presents it at the issuing bank in exchange for cash.

But it's also supported by a very well-settled body of law and practice. No single bank could adopt a meaningful change in security of the checking system without many other banks and probably the cooperation of legislative and regulatory bodies.

The last major change in the US for handling checks focused on enabling faster clearing through electronic transmission of checks by scanning paper checks or by generating electronic checks in the first place. Faster clearing, less paper handling, and fewer bounced checks was more important to the banks than changes to the check to reduce the incidence of fraud.

  • 1
    Great answer. Welcome to money.SE. – TTT Jan 19 at 16:05
  • 2
    One note, since the bank that issues the checks is the same that verifies it, it could implement it's own check numbering/verification system without other bank's cooperation. However, it would need cooperation from check printing services, which right now are allowed to be customized and printed by third parties. – Rick Jan 19 at 16:55
  • 1
    In practice the depositing bank, a mobile app, or a third-party check scanning device is the one that verifies it and captures the data from the check. Part of that data is an account number that is controlled by the issuing bank, but it's only 13 digits long. And that's not much to work with. The paper check often never goes back to the issuing bank, and is "truncated" and replaced with a check image. – David Browne - Microsoft Jan 19 at 19:14
  • 1
    What DavidBrowne said, plus the fact that checks are created by the account-holder, not by the bank where the account is held. – Ben Voigt Jan 19 at 21:14

Why has no such method been implemented?

Checks aren't always deposited/cashed in a timely fashion. Also, a single account can have multiple checkbooks, and therefore there's no requirement that they be used in strict order. Ordering is used to some extent by banks to catch fraud already, but I don't see how your proposed solution helps significantly.

While banks do try to limit check fraud (ABA reported 91% of check fraud was prevented in 2018), likely the cost of the fraud hasn't been significant enough to justify attempting to re-vamp a very old standard. There has been an up-tick in attempted check fraud as cards have become increasingly secure, so maybe it will become a higher priority.

Changing standards also likely involves regulatory changes, there's a lot of regulation around banking processes.

The easier approach that banks seem to have pursued is attempting to change customer behavior by encouraging card-use, embracing payment apps, offering bill-pay services, etc. Check-writing has declined very significantly in the past 20 years, so it may be a problem that isn't worth fixing. According to the 2019 Federal Reserve Payments Study:

Check payments accounted for 8.3 percent by number and 26.6 percent by value of core noncash payments in 2018, down from 58.8 percent by number and 67.4 percent by value in 2000.

  • 1
    Given the breaches of the likes of Zelle, I don't see changing customer behavior as useful. Not to mention how long the industry took in order to include chips on credit cards. – paulj Jan 19 at 16:08
  • 4
    @paulj "breaches of the likes of Zelle" do you have a link to reporting about a breach of Zelle? I've not heard of any such breaches before. – TylerH Jan 19 at 16:24
  • 1
    @paulj Not following your point, you're saying that because another solution isn't perfect and because it takes a long time to implement new systems they shouldn't try? Customer behavior has changed considerably over the last 20 years, why don't you think that's useful? – Hart CO Jan 19 at 17:02
  • 1
    @paulj "The financial industry does not want security." As with every industry, financial institutions are pragmatic about security. If the (probably small amount of) fraud costs less money+hassle than the security measure, than they'll deal with the fraud instead. As sevenseves points out in their answer, criminals are pragmatists, too, and "there are easier ways to defraud people" – jpaugh Jan 19 at 20:07
  • 2
    @HartCO prior to the Target breach forcing everyone's hand US banks were hoping they could skip over the insert chip card in slot generation entirely; and go directly to contactless payment. But they were making near zero progress on that front because everyone was creating and pushing their own platform to try and be the one getting rich of transaction fees. – Dan Is Fiddling By Firelight Jan 19 at 22:27

Lets assume that they implement your your idea: there is an algorithm that generates a pseudorandom check numbering algorithm.

Your bank would have to use your account number, the routing number for the bank, and a salt to feed the algorithm. The check numbers would then have to be transmitted by the bank to the company that prints the blank checks.

You write a check and give it to somebody: this could be done in person, or by mail. The other person takes it to their bank. Their bank can't verify the information because they don't have the salt value. So they will put a hold on the value for a few days until the image of the check gets to your bank and they can verify that the check number is valid, and not been processed before.

If you give it to a grocery store they can't validate the check number without being able to exchange information with your bank.

Today with the current system the recipient, or the other persons bank, takes some risk if they assume the check is good. Your suggestion adds complexity but doesn't change the fact that there is always a delay between the handing over of the check and the verification.

Consumers want the delay to be small. Financial institutions want to know the check is good. That clash will still be there under your system, unless you can get all the systems to create a method to instantly verify the numbers on the check. Now if that existed you would be protected against a check that bounces....

  • Only the first two paragraphs actually address the question but there's no conclusion. – Rick Jan 19 at 16:29
  • I actually want this, but not so much about verifying a check is good, but so much that somebody who compromises a voided check can't issue a stack of new checks against the account because that will surely be caught and rolled back. – Joshua Jan 19 at 19:10

The reason is that using checks is a flawed payment system from a security point. Making minor changes in security would not make any real difference. You could compare with cash where as long as bills has been around they have been forged. The reason checks still are around is that they "safe enough", "reasonably convenient" and "well known in USA".

In large parts of the rest of the world, checks are more or less non-existent. In my home country, Sweden the change happened around 1993 if my memory serves me correctly. I worked in a bank office at the time and saw it happen. One of the banks started charging you about a dollar for each check, and very quickly all the other banks started doing the same. In about about a year, checks went from rather usual to basically non-existent. Of course, there were alternative methods for handling payments already in place at the time. Personally most of my recurring payments such as rent, utilities and mortgage, are through direct debit towards the account where I receive my salary. The company sends the bill electronically and unless I stop the payment it will be done on the correct date (it can easily be stopped through my internet bank). I pay daily costs, groceries and such, with a debit card. Other payments I do through my internet bank or directly from my mobile phone: a service just about everyone uses connects my phone number to my bank account and I can both send and receive payments up to about 1000 dollars that way. I have no bills or coins, have not been using it for many years.

The direction the world is going is towards non-paper payments using electronic interchanges and chip-based debit cards, so there is probably very little incentive to improve security for checks. There are of course problems with this direction, some examples:

  • You need to exist in the "system" to be able to have an account
  • As payments are traceable to a much larger extent privacy is a concern (and it also makes it more difficult to do illegal activities or avoid taxes)
  • It sets a lot of requirements on electronic systems, internet and such.
  • There is a cost for the seller to setup to receive payments, distinct from using cash. One effect has been that more and more sellers do not accept cash at all. This goes both for shops and when private selling.
  • It does increase the marginal costs for doing a transaction. One more cash pay has very small extra costs, but each debit card transaction has a fixed cost for the shop. One effect has been that small shops now bundles their goods to cost at least 2 dollars or so (more or less 20 Swedish Krona). This probably drives both inflation and a change in the types of shops available.

Anyway, my five cents worth of thoughts.


This would allow the bank to check that a particular cheque number was issued to a particular account and had not previously been used

We already do this with sequential check numbers. An attacker with a check from an individual has no way of knowing how many more checks were written and cashed before they try to cash a fake.

Many attackers use real checks

There are plenty of ways to defraud banks of money with perfectly legitimate checks. Bouncing checks, Check Kiting, and Check Washing come to mind quickly.

Even a truly random number wouldn't stop these sorts of attacks because they all use a real, valid check, and either write it for money that isn't in the account or change details.

Many stores will no longer take checks because of the very real problem of people writing bad ones that won't cash at the end of the day because the individual's account is overdrawn. There is also a plethora of nearly free options like debit cards and credit cards.

Finally, banks may release small amounts of money immediately, but if you present them with a large check, they will place a hold until funds are transferred in a week. Check-cashing places will simply refuse to cash large checks. It's likely not that hard to make a fake check, but it's also a very serious felony.

With all the protections in place, you'd be stuck faking a large number of checks for small amounts of money. Each check is another chance to get caught. Cashing several checks in a short period is likely to raise suspicion. There are easier ways to defraud people.

  • removed no longer relevant comments (will remove this one soon) – Rick Jan 19 at 16:48
  • I give up - I tried to fix the typo "Check Kiting", and SE wouldn't let me, as edits have to be at least six characters. I found a couple of places that could use commas, but not another six characters, didn't want to change any actual words. I do kinda like "Check-Knitting", it sounds like it should be an attack. :) – Cyclops Jan 19 at 21:14
  • @Cyclops - Spell check decided kiting = knitting and I didn't notice the change. Knitting might actually be a better term since you're essentially writing another bad check to cover the first bad one. i.e. knitting bad checks together to keep floating your first bad one. – sevensevens Jan 19 at 21:33

Hold on. If you go to that question and read OP's comment to my answer, you'll see that this was a fraud by a house-sitter gaining physical access to their book of checks. (And that is why I use a PMB). So your proposal wouldn't have helped at all in that case.

Your idea removes "well-understood" and creates "opaque".

You're essentially talking about the check numbers being a one-time pad, which only the bank knows. So only the bank could attest to the validity of a particular paper check. (This also puts third party check printers right out of business, but nevermind that).

Well hold on. The bank already knows your check numbers. They know them because they cashed your last one, and can add +1. So can you. And most people who have any care with their paper checks, reorder checks so the numbers are sequential to the checks they already have - in fact third party check printers need to know which number to start at.

So if you just wrote 4361, the bank won't be surprised by 4362 or 4366 (as long as 4362-5 arrive soon after)... however if a "1003" shows up, it's pretty easy to automate the task of presenting an image of checks 4361 and 1003 to see if their handwriting and signatures reasonably match. If 100 of these instances happen a day, and an auditor can compare signatures in 2 seconds, then you're talking about 5 minutes of an auditor's time to screen the 100 cases and escalate the 3 faulty ones.

What your trick does is close one gap: where a fraudster knows your last check number and issues new cheques reasonably close in number. However, that was never that much of a gap: it's arguably a feature, not a bug.

  • If the fraudster issues checks sequential to the known number, they'll collide with real checks the account holder has written. That's a lose-lose for the fraudster: even if the fraud check arrives first, it means the legitimate check bounces, and the payee alerts the account holder! Quick attention is the enemy of fraudsters, they need the transaction to go unnoticed for weeks so it can't be quickly reversed among the banks. That's especially true if they're using a "patsy" to receive the money.
  • Any near-number check fraud has another fatal flaw: near checks are supposed to be similar in appearance. But the fraudster's won't be. Remember that Check21 means the banks are handling digital images of checks, so most of the comparison task can be automated.

I myself write few enough checks that I buy them from the bank 3 at a time. My bank knows which numbers they issued, and they certainly know the appearance of their own checks.

Regardless, presuming "always online" is always a mistake

I see many, many proposals to enhance financial security, and they all have the same thing in common: they presume an "always online" internet connection. And I think to myself, "Wow, this person lives in a big city."

Because you get into mountain country, or even just the wrong block in suburbia or exurbia, and forget about it.

I'm sure there'd be an inter-bank clearinghouse to confirm the validity of checks online. However, without solid internet at an acceptance location, it would not be viable for check acceptors to validate the check at time of sale.

Further, checks are extremely well-established in the law

The evidence chain is simple. There you are, holding the bounced check in your hand. Your local bank manager will attest to its being refused, and is ready to explain the complexities of the check clearinghouse system to a jury. Courts like paper. They especially like paper when it has longstanding conventions as to its meaning, to which many readily available neutral parties can attest.

In Check21 this may be paper that has been reprinted from a scan of original documents, but again, any bank manager will swear to the veracity of that system. And the check system has been tuned for centuries to make it easily defended in court.

That quells arguments about the paper's meaning and validity.

The evidence is clear enough that it wasn't hard to criminalize misdeeds with paper checks. The criminal justice system is pretty good at sending fraudsters to jail on check-fraud charges alone. This serves as a potent deterrent to check fraud; at least local check fraud.

Note that in the instant case (the one you link), the miscreant got caught. Easily.


Rather than using a completely random cheque number, it would be preferable for them to only use a few of them. E.g. have the cheques increment by 100, and use the last two digits for the verification code. Then, someone making up a cheque number would have a 1% probability of the right one (assuming nobody leaked the algorithm they used for checksum). This should be completely backwards compatible with the existing systems.

Answering this part of mhoran_psprep post:

Financial institutions want to know the check is good. That clash will still be there under your system, unless you can get all the systems to create a method to instantly verify the numbers on the check. Now if that existed you would be protected against a check that bounces....

it would be possible to use a system that also allowed third parties to verify that the cheque number is legit (by using a public key signature with ECC for example). It would however require its own block of digits (or letters) to include that.

Nonetheless, this would only ensure that there is a valid cheque with that number, not that it hasn't already be cashed, the amount/recipient wasn't altered, there was no deception involved for obtaining it, etc.

  • 1
    If the verification algorithm is publicly known, the attacker merely has to create 100 possible check numbers and use verification (which he performs himself, the bank doesn't ever know that 99 out of 100 verifications have failed) to determine which is valid. Enabling third-party verification implies that the algorithm is widely known. – Ben Voigt Jan 19 at 21:19
  • @BenVoigt: no. The 100 possibilities were if the algorithm was "secret". The third party verification using elliptic cryptography (such as NaCl) would require something like 64 bytes. – Ángel Jan 21 at 22:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.