Validator uses the standard Java coding conventions. Considering I don't know anything about ISBN numbers I would need a JUnit test case proving it works and some javadoc describing the ISBN rules before I would commit anything. Add the Apache 2.0 license to the top of your .java files before attaching them to a new bugzilla enhancement ticket. See other validator source files for an example you can cut and paste.
Thanks! David --- Mark Lowe <[EMAIL PROTECTED]> wrote: > Hello > > I've just written an ISBN validator I don't think i can diff a file > that doesn't exist. But i'd like to see if its of use to anyone other > than myself. > > I've attached it and i'll just check the commons stuff out of cvs and > see if there's a jalopy template that could iron out anything that > would be displeasing to anyone in terms of coding. > > What do i have to do to get this committed? > > I still need to add an option to switch checking the regular expression > off in case folk want to use it to check numbers with no hyphens or > spaces. At the moment the input can be either. > > Mark > > > package com.boxstuff.bookshop.util; > > import org.apache.oro.text.perl.Perl5Util; > > > /** > *<p>A class for validating ISBN numbers. > * Based on document <a > href="http://www.isbn.org/standards/home/isbn/international/html/usm4.htm"> > * > http://www.isbn.org/standards/home/isbn/international/html/usm4.htm</a></p> > * @author <a href="mailto:[EMAIL PROTECTED]">Mark Lowe</a> > */ > public class ISBNValidator { > /** > * @return isbn regular expression > */ > private final static String ISBN_NUMBER_PATTERN = "([0-9 ]|-){11}(-| > )[0-9X]"; > > /** > * @return isbn regular expression including ISBN prefix > */ > private final static String ISBN_PATTERN = "(ISBN[= ])?" + > ISBN_NUMBER_PATTERN; > > /** > * <p>Empty contructor.</p> > */ > public ISBNValidator() { > } > > /** > * <p>First checked against reqular expression to see if hyphens or > spaces are correct. > * Second validates actual number. ISBN is weighted from length to > penultimate number which is used as a control number. > * The sum of each digit and respective weight is calcuated into a > total along with the conrtol number. > * If the total returns 0 for modulus 11 it returns valid.</p> > * > * @param isbn Candidate ISBN number to be validated. > * @return whether the number is valid or not. > */ > public boolean isValid(String isbn) { > boolean result = false; > > if (!isValidPattern(isbn)) { > return false; > } > > isbn = clean(isbn); > > int j = isbn.length(); > int total = 0; > int sum = 0; > int num = 0; > int control = > Character.getNumericValue(isbn.charAt(isbn.length() - 1)); > > for (int i = 0; (i < isbn.length()) && (j >= 2); i++) { > num = Character.getNumericValue(isbn.charAt(i)); > sum = j * num; > total = total + sum; > j--; > } > > total = total + control; > result = (total % 11) == 0; > > return result; > } > > /** > * @param isbn The string to be cleaned before full validation. > * @return clean isbn string without any non digits. > */ > private String clean(String isbn) { > String result = ""; > int j = 0; > > for (int i = 0; i < isbn.length(); i++) { > char ch = isbn.charAt(i); > > if (Character.isDigit(ch)) { > result += ch; > } > } > > return new String(result); > } > > /** > * @param isbn Full isbn code > * @return whether the isbn code fits matches regular expression > * @see org.apache.oro.text.perl.Perl5Util#match > */ > private boolean isValidPattern(String isbn) { > Perl5Util regexpValidator = new Perl5Util(); > return regexpValidator.match("/" + ISBN_NUMBER_PATTERN + "/", > isbn); > } > > } > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] __________________________________ Do you Yahoo!? New and Improved Yahoo! Mail - Send 10MB messages! http://promotions.yahoo.com/new_mail --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
