10-03-2001
Well, if you really want to know how to do this right (with sed) *thinks*... There's always a right way and a wrong way to do everything... Of course, the right way is always more complex.... ;-(
I guess I would create a file "filename.sed", with something like the following in it:
<PRE>
s/4[0-9]\{3\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{3\}/\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*/g
s/5[1-5][0-9]\{2\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{3\}/\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*
\*/g
s/6011[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{3\}/\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*/g
s/4[0-9]\{3\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}/\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*/g
s/5[1-5][0-9]\{2\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}/\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*/g
s/6011[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}[- ]*[0-9]\{4\}/\*\*\*\*-\*\*\*\*-\*\*\*\*-\*\*\*\*/g
s/3[47][0-9]\{13\}/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/g
</PRE>
To run it I guess you would type sed -f filename.sed < file
It should match:
Line 1: Visa: prefix 4 length 19 digits with optional spaces or dashes between first set of 4 numbers, followed by an optional dash and 3 digits
Line 2: Mastercard: prefix 51 or 55 length 19 digits with optional spaces or dashes between first set of 4 numbers, followed by an optional dash and 3 digits
Line 3: Discover: prefix 6011 length 19 digits with optional spaces or dashes between first set of 4 numbers, followed by an optional dash and 3 digits NOTE: I'm not sure if discover has the optional 3 digits or not if so this line should be removed
Visa: prefix 4 length 19 digits with optional spaces or dashes between first set of 4 numbers, followed by an optional dash and 3 digits
Line 4: Visa: prefix 4 length 16 digits with optional spaces or dashes between first set of 4 numbers.
Line 5: Mastercard: prefix 51 or 55 length 16 digits with optional spaces or dashes between first set of 4 numbers.
Line 6: Discover: prefix 6011 length 16 digits with optional spaces or dashes between first set of 4 numbers
Line 7: American Express: prefix 34 or 37, 15 digits long (no -)
I'm not really sure how well this would work, because I don't have anything to test it against... But, my gut feeling as I put it together is that this is pretty close to what you are looking for?...
- dEvNuL
9 More Discussions You Might Find Interesting
1. UNIX for Dummies Questions & Answers
Is anyone know some scripts to generate random number without repetition using bash; for example generate 10 different random numbers.
Thanks (8 Replies)
Discussion started by: asal_email
8 Replies
2. Shell Programming and Scripting
Hello All,
I want to make a simple script which generate random number from 0 to 1000.
and simply display it.
Plz HELP!!!!!!
Regards,
Waqas Ahmed (2 Replies)
Discussion started by: wakhan
2 Replies
3. UNIX for Dummies Questions & Answers
Hi one and all,
I'm working on a Bash script that is designed to calculate how much IP traffic has passed through a port to determine traffic volume over a given amount of time.
I've currently been able to use the netstat -s command coupled with grep to write to a file the total packets... (13 Replies)
Discussion started by: nistleloy
13 Replies
4. Shell Programming and Scripting
Hi Guys I have a script to find Ranomd numbers. But I want to make the file to produce more random. Could u guys help me plz.
In this Script I have the code that generates random in for loop and the range I have specified in my %chromlength
input and out put will be like this
chrno start end... (3 Replies)
Discussion started by: repinementer
3 Replies
5. Shell Programming and Scripting
Hi,
I am having trouble with generating random numbers. can this be done with awk?
So I have a file that looks like this:
23 30
24 40
26 34
So column1 is start and column2 is end. I want to generate 3 random #'s between start and stop:
So the output will look like this:
... (9 Replies)
Discussion started by: phil_heath
9 Replies
6. Shell Programming and Scripting
Hi Can someone help me with this one?
I have string..
(PROC_PROC_ID == 12183) <--PID is dynamic
and i want to replace the PID number with whatever PID from
/opt/hpws/apache32_2/logs/httpd.pid file.
i'm having problem since the PID on the string is dynamic. It may be 2-5 digits or more.
... (5 Replies)
Discussion started by: ryandegreat25
5 Replies
7. Shell Programming and Scripting
Hi people :)
I'm learning shell scripting using bash and I want to generate 4 floating point number with 5 decimal places and write them to a file and a variable. I've done all this except the $RAMDOM enviroment variable does not generate a float number but a integrer.
I hope you could... (3 Replies)
Discussion started by: pharaoh
3 Replies
8. Shell Programming and Scripting
I have a for loop that cycles twice and generates 1 random number for each pass through. I would like to be able to store the two numbers to use later for arithmetics. Is there a way to do that? Right now I can only seem to use the last random number for anything. Thanks. (4 Replies)
Discussion started by: AxlVanDamme
4 Replies
9. Homework & Coursework Questions
Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
Write a shell script that will take the sum of two random number?
Ex: Random n1 +Random n2 = result
i tries to write it but i had some dufficulties
... (3 Replies)
Discussion started by: renegade755
3 Replies
LEARN ABOUT DEBIAN
algorithm::checkdigits::mbase_003
CheckDigits::MBase_003(3pm) User Contributed Perl Documentation CheckDigits::MBase_003(3pm)
NAME
CheckDigits::MBase_003 - compute check digits for SICI (Serial Item and Contribution Identifier)
SYNOPSIS
use Algorithm::CheckDigits;
$sici = CheckDigits('sici');
if ($sici->is_valid('0784-8679(20040308)6:<138>2.0.TX;2-H')) {
# do something
}
$cn = $sici->complete('0784-8679(20040308)6:<138>2.0.TX;2-');
# $cn = '0784-8679(20040308)6:<138>2.0.TX;2-H'
$cd = $sici->checkdigit('0784-8679(20040308)6:<138>2.0.TX;2-H');
# $cd = 'H'
$bn = $sici->basenumber('0784-8679(20040308)6:<138>2.0.TX;2-H');
# $bn = '0784-8679(20040308)6:<138>2.0.TX;2-';
DESCRIPTION
ALGORITHM
0 In the string describing the number all letters (A-Z) are replaced with numbers 10-35 accordingly. All other non-numbers are replaced
by 36.
1 Beginning right the numbers at all odd positions are added.
2 The sum from step 1 is multiplied by 3.
3 Beginning right the numbers at all even positions are added.
4 The sums from step 2 and 3 are added.
5 The sum from step 4 is taken modulo 37.
6 The checksum is 37 minus the sum from step 5 where numbers from 10 to 35 are represented by 'A' to 'Z' accordingly and 36 is
represented by '#'.
METHODS
is_valid($number)
Returns true only if $number consists solely of numbers and hyphens and the two digits in the middle are valid check digits according
to the algorithm given above.
Returns false otherwise,
complete($number)
The check digit for $number is computed and inserted into the middle of $number.
Returns the complete number with check digit or '' if $number does not consist solely of digits, hyphens and spaces.
basenumber($number)
Returns the basenumber of $number if $number has a valid check digit.
Return '' otherwise.
checkdigit($number)
Returns the check digits of $number if $number has valid check digits.
Return '' otherwise.
EXPORT
None by default.
AUTHOR
Mathias Weidner, <mathias@weidner.in-bad-schmiedeberg.de>
SEE ALSO
perl, CheckDigits, www.pruefziffernberechnung.de, http://sunsite.berkeley.edu/SICI/sici.pdf
perl v5.10.0 2008-05-17 CheckDigits::MBase_003(3pm)