using static System.Console ;
using System;
using System.Linq ;
public class Test {
public static void Main( ) {
WriteLine( GerarCpf( Uf.SP ) ) ;
WriteLine( GerarCpf( ) ) ;
}
public static string GerarCpf( Uf uf = Uf.NA ) {
var random = new Random( ) ;
int [ ] digitos = new int [ 11 ] ;
int soma = 0 , soma2 = 0 ;
do {
for ( var i = 0 ; i < 8 ; i++ ) {
digitos[ i] = random.Next ( 10 ) ;
soma += digitos[ i] * ( 10 - i) ;
soma2 += digitos[ i] * ( 11 - i) ;
}
digitos[ 8 ] = uf == Uf.NA ? random.Next ( 10 ) : ( int ) uf;
soma += digitos[ 8 ] * 2 ;
soma2 += digitos[ 8 ] * 3 ;
} while ( Repetidos( digitos) ) ;
var resto = soma % 11 ;
digitos[ 9 ] = resto < 2 ? 0 : 11 - resto;
soma2 += digitos[ 9 ] * 2 ;
resto = soma2 % 11 ;
digitos[ 10 ] = resto < 2 ? 0 : 11 - resto;
return string.Join ( "" , digitos.Select ( p => p.ToString ( ) ) .ToArray ( ) ) ;
}
private static bool Repetidos( int [ ] digitos) {
var val = digitos[ 0 ] ;
return digitos.Take ( 9 ) .All ( x => x == val) ;
}
}
public enum Uf {
AC = 2 , AL = 4 , AP = 2 , AM = 2 , BA = 5 , CE = 3 , DF = 1 , ES = 7 , GO = 1 , MA = 3 , MT = 1 , MS = 1 , MG = 6 , PA = 2 , PB = 4 , PR = 9 , PE = 4 , PI = 3 , RJ = 7 , RN = 4 , RS = 0 , RO = 2 , RR = 2 , SC = 9 , SP = 8 , SE = 5 , TO = 1 , NA = - 1
}
//https://pt.stackoverflow.com/q/33669/101
dXNpbmcgc3RhdGljIFN5c3RlbS5Db25zb2xlOwp1c2luZyBTeXN0ZW07CnVzaW5nIFN5c3RlbS5MaW5xOwoKcHVibGljIGNsYXNzIFRlc3QgewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJV3JpdGVMaW5lKEdlcmFyQ3BmKFVmLlNQKSk7CgkJV3JpdGVMaW5lKEdlcmFyQ3BmKCkpOwoJfQoJcHVibGljIHN0YXRpYyBzdHJpbmcgR2VyYXJDcGYoVWYgdWYgPSBVZi5OQSkgewoJCXZhciByYW5kb20gPSBuZXcgUmFuZG9tKCk7CgkJaW50W10gZGlnaXRvcyA9IG5ldyBpbnRbMTFdOwoJCWludCBzb21hID0gMCwgc29tYTIgPSAwOwoJCWRvIHsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHsKCQkJCWRpZ2l0b3NbaV0gPSByYW5kb20uTmV4dCgxMCk7CgkJCQlzb21hICs9IGRpZ2l0b3NbaV0gKiAoMTAgLSBpKTsKCQkJCXNvbWEyICs9IGRpZ2l0b3NbaV0gKiAoMTEgLSBpKTsKCQkJfQoJCQlkaWdpdG9zWzhdID0gdWYgPT0gVWYuTkEgPyByYW5kb20uTmV4dCgxMCkgOiAoaW50KXVmOwoJCQlzb21hICs9IGRpZ2l0b3NbOF0gKiAyOwoJCQlzb21hMiArPSBkaWdpdG9zWzhdICogMzsKCQl9IHdoaWxlIChSZXBldGlkb3MoZGlnaXRvcykpOwoJCXZhciByZXN0byA9IHNvbWEgJSAxMTsKCQlkaWdpdG9zWzldID0gcmVzdG8gPCAyID8gMCA6IDExIC0gcmVzdG87CgkJc29tYTIgKz0gZGlnaXRvc1s5XSAqIDI7CgkJcmVzdG8gPSBzb21hMiAlIDExOwoJCWRpZ2l0b3NbMTBdID0gcmVzdG8gPCAyID8gMCA6IDExIC0gcmVzdG87CgkJcmV0dXJuIHN0cmluZy5Kb2luKCIiLCBkaWdpdG9zLlNlbGVjdChwID0+IHAuVG9TdHJpbmcoKSkuVG9BcnJheSgpKTsKCX0KCQoJcHJpdmF0ZSBzdGF0aWMgYm9vbCBSZXBldGlkb3MoaW50W10gZGlnaXRvcykgewoJCXZhciB2YWwgPSBkaWdpdG9zWzBdOwoJCXJldHVybiBkaWdpdG9zLlRha2UoOSkuQWxsKHggPT4geCA9PSB2YWwpOyAKCX0KfQoKcHVibGljIGVudW0gVWYgewoJQUMgPSAyLAlBTCA9IDQsCUFQID0gMiwJQU0gPSAyLAlCQSA9IDUsCUNFID0gMywJREYgPSAxLAlFUyA9IDcsCUdPID0gMSwJTUEgPSAzLAlNVCA9IDEsCU1TID0gMSwJTUcgPSA2LAlQQSA9IDIsCVBCID0gNCwJUFIgPSA5LAlQRSA9IDQsCVBJID0gMywJUkogPSA3LAlSTiA9IDQsCVJTID0gMCwJUk8gPSAyLAlSUiA9IDIsCVNDID0gOSwJU1AgPSA4LAlTRSA9IDUsCVRPID0gMSwJTkEgPSAtMQp9CgovL2h0dHBzOi8vcHQuc3RhY2tvdmVyZmxvdy5jb20vcS8zMzY2OS8xMDE=