### Wednesday, March 15, 2006

## Re: st: Re: summing up digits and comparing to a check digit

Wow, step away from your desk for a minute and a 10 post thread appears with a clear and concise bug-avoiding improvement to my little bit of code. Statalist can work at an amazing speed sometimes...

Michael

----- Original Message ----- "Nick Cox" <n.j.cox@durham.ac.uk> wrote: > gen x = string(myvar, "%07.0f") > > gets you there in one. > > Nick > n.j.cox@durham.ac.uk > > Austin Nichols > >> I agree wholeheartedly with Michael Blasnik's opening caveat--was your >> example 12050457 => 0+5+0+4+5+7=21/10=2+1 => check digit=1 supposed to >> be 1050457 => 0+5+0+4+5+7=21/10=2+1 => check digit=1 by any chance? >> >> As for his solution, it works well except when digits may be fewer >> than 6 digits when turned into strings--I would replace his second >> line with >> replace x=substr("0000000",1,7-length(x))+x >> to pad numbers out to y digits with leading zeros, and then >> add another line >> assert length(x)==7 >> to make sure there are no odd cases. >> >> . li m x c, noo clean >> >> myvar x check >> 105059 0105059 0 >> 2459 0002459 0 >> 7102059 7102059 7 >> >> On 3/15/06, Michael Blasnik <michael.blasnik@verizon.net> wrote: >> > I'm not sure I understand the problem -- one of your >> examples is an 8 digit >> > number but you say you have 7 digit numbers. Anyway, here >> is some "highly >> > advanced programming" (?) : >> > >> > gen x=string(myvar) >> > replace x="0"+x if length(x)==6 >> > gen >> > >> check=mod(real(substr(x,2,1))+real(substr(x,3,1))+real(substr( >> x,4,1))+real(substr(x,5,1))+real(substr(x,6,1))+real(substr(x, >> 7,1)),10) >> > >> > make sure to remove any line break that the email puts in >> the last line.

* * For searches and help try: * http://www.stata.com/support/faqs/res/findit.html * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/

Tag: statalist