← Blog · 6 September 2026 · Lire en français

Reading a French phone number aloud: the grouping trap

01 23 45 67 89 is read in pairs, not digit by digit and not as one giant number. Phone numbers, IBANs, reference codes: the forms that trip up French speech synthesis, and how a well-prepared engine handles them.

A phone number is a string of digits that reads neither as a number nor digit by digit, but in groups. In France, "01 23 45 67 89" is spoken "zéro un, vingt-trois, quarante-cinq, soixante-sept, quatre-vingt-neuf", pair by pair. Reading it as "one billion two hundred thirty-four million..." is absurd, and reading it digit by digit is correct but exhausting and easy to lose track of. Pairing is not a flourish: it is how a French speaker dictates and remembers a number, and a voice that ignores it makes the information useless at the very moment someone is trying to write it down.

The case goes beyond the telephone. An IBAN, a company registration number, a tracking code, a case reference: each has an expected segmentation, and each exposes the same weakness in an engine that predicts sound without knowing what it is reading. Here are the forms that genuinely cause trouble, the reading you should expect, and the error you hear on poorly prepared voices.

The table of digit strings that fool the machine

| Written form | Expected reading | Common error |
|---|---|---|
| 01 23 45 67 89 | zéro un, vingt-trois, quarante-cinq, soixante-sept, quatre-vingt-neuf | "one billion two hundred thirty-four million..." |
| 0123456789 | zéro un, vingt-trois, quarante-cinq, soixante-sept, quatre-vingt-neuf | read as one giant number |
| +33 1 23 45 67 89 | plus trente-trois, un, vingt-trois... | "plus trente-trois un vingt-trois" with no pauses |
| 06.12.34.56.78 | zéro six, douze, trente-quatre, cinquante-six, soixante-dix-huit | "zéro six point douze point..." |
| 3949 | trente-neuf, quarante-neuf | "trois mille neuf cent quarante-neuf" |
| 123 456 789 00012 | cent vingt-trois, quatre cent cinquante-six... | a fourteen-digit number in one breath |
| appelez le 15 | appelez le quinze | "appelez le un cinq" |
| poste 4021 | poste quarante, vingt et un | "poste quatre mille vingt et un" |
| réf. A-2026-017 | référence A, deux mille vingt-six, zéro dix-sept | "a minus deux mille vingt-six..." |

Each line is a test you can run against any tool, ours included, in two minutes. The right-hand column is not a hypothesis: these are the readings you actually hear on generic voices that pronounce sound without an explicit model of French.

Why a digit string resists

The first trap is grouping itself. Nothing in a glued "0123456789" says where to cut. The spaces or dots in "01 23 45 67 89" help, but a naive engine treats them as number separators and reads "un" then "vingt-trois" without the pause that makes the number memorable. The leading zero is a second trap: in a number, a leading zero vanishes, but in a phone number it must be heard, or "01" becomes "un" and the area code is lost.

The third trap is meaning. "15" is an emergency number read "quinze", but the same pair inside an IBAN is sometimes read digit by digit. The dot in "06.12.34" is a separator here and a decimal point elsewhere. The plus in "+33" is an international dialling code, not an addition. None of these signs carries its meaning on its own: it depends on what the string represents, and that is exactly what character-by-character prediction does not model.

Good preparation means normalising the text upstream: recognising that a string is a phone number, a code or an identifier, then rewriting it in the expected segmentation before synthesis. This is rule work, not timbre. A beautiful voice fed badly will read your number as a ten-digit integer; an ordinary voice prepared well will read it in pairs. That is the whole logic of the French text to speech page: the essential part happens before any sound comes out.

What WeDispatch does about it, without overpromising

The common forms in the table, ten-digit numbers grouped in pairs, short emergency and service numbers, international dialling codes, are handled by the normalisation applied to every article, in both reading modes. Pairing is the default behaviour for a French number, and we treat it as a given.

What remains are the cases where segmentation depends on the domain. An IBAN reads in blocks of four, a registration number in specific slices, an internal code by your own convention: these cuts are not universal, and guessing wrong would be worse than reading digit by digit. Two things help. First, well-typed text guides the reading: keeping the original spaces of a number or an IBAN is usually enough. Second, for a reference that recurs across your content and must always read the same way, the pronunciation lexicon lets you fix the expected form once and for all, with no regeneration.

We prefer to put it this way rather than claim a machine always guesses right. It does not guess: it applies solid rules to the frequent cases, and leaves you in control of the identifiers specific to your line of work.

The test to run before you choose

Take a real article or listing from your site, not a demo text. Find a phone number, a service line, a case reference. Have the tool you are evaluating read those passages and listen to those points only: note whether you could copy the number down by ear without asking for a repeat. That is the only criterion that matters, and it is more predictive than a whole-article listen.

Phone numbers are cousins of ordinary numbers, the other great revealer, covered in reading numbers aloud in French. Web addresses and emails raise a neighbouring segmentation problem, addressed in reading URLs, emails and mentions. And if you want a full method for choosing between two voices, it is in how to evaluate a neural voice. A number you can write down on the first pass tells you more about a tool than any polished demo sentence.

Give your articles a voice with WeDispatch

This blog is itself voiced by WeDispatch. Curious how it sounds on your content?

Book a demo

Read next