All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.databene.domain.br.CPFGenerator Maven / Gradle / Ivy

Go to download

benerator is a framework for creating realistic and valid high-volume test data, used for testing (unit/integration/load) and showcase setup. Metadata constraints are imported from systems and/or configuration files. Data can imported from and exported to files and systems, anonymized or generated from scratch. Domain packages provide reusable generators for creating domain-specific data as names and addresses internationalizable in language and region. It is strongly customizable with plugins and configuration options.

The newest version!
/*
  * (c) Copyright 2009-2013 by Eric Chaves & Volker Bergmann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, is permitted under the terms of the
 * GNU General Public License (GPL).
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * WITHOUT A WARRANTY OF ANY KIND. ALL EXPRESS OR IMPLIED CONDITIONS,
 * REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE
 * HEREBY EXCLUDED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

package org.databene.domain.br;

import java.util.ArrayList;
import org.databene.benerator.util.ThreadSafeNonNullGenerator;

import java.util.Random;

/**
 * Generates Brazilian CPF numbers. CPF stands for 'Cadastro de Pessoa Fisica' 
 * and is a tax payer number assigned to an individual person (Pessoa Fisica).
 * @since 0.6.0
 * @author Eric Chaves
 * @author Volker Bergmann
 */
public class CPFGenerator extends ThreadSafeNonNullGenerator {

    /**
     * flag indicating should return CPF in numeric or formatted form.
     * defaults to true
     */
    private boolean formatted;
    private Random random;    

    public CPFGenerator(){
        this(false);
    }

    public CPFGenerator(boolean formatted){
    	this.random = new Random();
    	this.formatted = formatted;
    }

	@Override
	public String generate() {
    	StringBuilder buf = new StringBuilder();
    	ArrayList digits = new ArrayList();
	
	    for (int i=0; i < 9; i++)
	        digits.add(random.nextInt(9));
	    addDigit(digits);
	    addDigit(digits);
	
	    for(int i=0; i < digits.size(); i++)
	        buf.append(digits.get(i));
	    if (this.formatted) {
	        buf.insert(3, '.');
			buf.insert(7, '.');
			buf.insert(11, '-');
	    }
	    return buf.toString();
    }
    
    @Override
	public Class getGeneratedType() {
        return String.class;
    }
    
    private static void addDigit(ArrayList digits){
    	int sum=0;
    	for (int i=0, j=digits.size()+1; i < digits.size(); i++,j-- )
    		sum += digits.get(i) * j;
    	digits.add((sum % 11 < 2) ? 0: 11-(sum % 11));
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy