CNO
Cadastro Nacional de Obras, the registration of construction works with the Receita Federal (replaced the CEI for them, same numbering).
Validate
- JavaScript library
- Python library
- Go library1 case fails
- Ruby library2 cases fail
- Rust library1 case fails
- .NET library2 cases fail
- Erlang library
Validates a CNO. The CNO replaced the CEI for construction works and kept its numbering.
- Same rules as
cei.isValid. - A number is read only when it is a safe non-negative integer. A negative, fractional, non-finite or unsafe number is invalid.
- No official source publishes the check digit rule. Only the 12 positions and the CNO keeping the CEI number (Manual de Orientação do eSocial S-1.3, item 9.1) are official. The IN RFB 2.061/2021 has no check digit, and the eSocial only checks that the number exists in the Receita Federal base. The rule comes from third-party reference implementations, cross-checked against the CNO open data and SERPRO's example
000000336854. - A number loses its leading zeros, so a value that starts with
0is only accepted as a string:"000000336854"is valid and336854is not.
| Parameter | Type | Required |
|---|---|---|
value | string | number | yes |
| returns | boolean |
Check if a CNO (Cadastro Nacional de Obras) number is valid. The CNO replaced the CEI for construction works and kept its numbering.
- Same rules as
isValidCei, the leading zeros of a number included.
import { isValidCno } from '@brazilian-utils/brazilian-utils';
isValidCno('11.084.01680/62'); // true
isValidCno('111130137368'); // true
isValidCno(401800097960); // true
isValidCno(-401800097960); // false (not a non-negative safe integer)
isValidCno('110840168063'); // false (invalid check digit)
isValidCno('000000000000'); // false (repeated digits)Source: CNO page of the Receita Federal, SERPRO, CNO cadastro, eSocial MOS S-1.3, item 9.1 and the CNO open dataset.
Code: brazilian-utils/javascriptTry it with JavaScript isValidCno
Shared test cases (22) and the result in each library cno.isValid
Format
- JavaScript library
- Python library
- Go library
- Ruby library7 cases fail
- Rust library
- .NET library1 case fails
- Erlang library
Formats a CNO with the mask 00.000.00000/00 (the CEI numbering).
- Same rules as
cei.format: the mask is applied as far as the digits go, and digits beyond the 12th are dropped.options.padfirst left-pads with zeros to 12 digits. - A number is read only when it is a safe non-negative integer. A negative, fractional, non-finite or unsafe number gives an empty string (2.4.0 read the digits of any number, sign and decimal point dropped).
options.padon a value with no digits ("","---",null) still gives an empty string. Until 2.4.0""and"---"gave the whole zero mask.
| Parameter | Type | Required |
|---|---|---|
value | string | number | yes |
options | FormatCnoOptions | no |
options.pad | boolean | no |
| returns | string |
Format a CNO (Cadastro Nacional de Obras) number.
- Same rules as
formatCei: the00.000.00000/00mask, withpadinFormatCnoOptions.
import { formatCno } from '@brazilian-utils/brazilian-utils';
formatCno('111130137368'); // 11.113.01373/68
formatCno(401800097960); // 40.180.00979/60
formatCno('979', { pad: true }); // 00.000.00009/79Try it with JavaScript formatCno
Shared test cases (20) and the result in each library cno.format
Parse
- JavaScript library
- Python library
- Go library
- Ruby library2 cases fail
- Rust library
- .NET library
- Erlang library
Removes CNO formatting and keeps only digits, capped at 12 digits.
- A number is read only when it is a safe non-negative integer. A negative, fractional, non-finite or unsafe number gives an empty string (2.4.0 read the digits of any number, sign and decimal point dropped).
| Parameter | Type | Required |
|---|---|---|
value | string | number | yes |
| returns | string |
Remove CNO (Cadastro Nacional de Obras) formatting, keep only digits, and cap the result to 12 digits, the numbering the CNO kept from the CEI.
import { parseCno } from '@brazilian-utils/brazilian-utils';
parseCno('11.113.01373/68'); // '111130137368'Try it with JavaScript parseCno
Shared test cases (9) and the result in each library cno.parse
Official sources
Last updated on
